secra-database

Crates.iosecra-database
lib.rssecra-database
version0.1.0
created_at2025-12-30 08:07:15.971994+00
updated_at2025-12-30 08:07:15.971994+00
description基于 SeaORM 的 Rust 数据库连接和管理库
homepage
repository
max_upload_size
id2012248
size119,023
(BadassFree)

documentation

README

Secra Database

一个基于 SeaORM 的 Rust 数据库连接和管理库,提供数据库连接、连接池、Schema 和表管理功能。

功能特性

  • ✅ 数据库连接管理(PostgreSQL、MySQL、SQLite)
  • ✅ 连接池管理和监控
  • ✅ Schema 管理(PostgreSQL)
  • ✅ 表信息查询和管理
  • ✅ 安全的 URL 编码和配置验证
  • ✅ 支持 PgBouncer
  • ✅ 完整的错误处理

安装

Cargo.toml 中添加依赖:

[dependencies]
secra-database = { path = "../secra-database" }
# 或者从 git 仓库
# secra-database = { git = "https://github.com/your-org/secra-database" }

快速开始

基本连接

use secra_database::{DatabaseConfig, DatabaseService, ConnectionOptions};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = DatabaseConfig {
        database_type: "postgres".to_string(),
        host: "localhost".to_string(),
        port: 5432,
        username: "user".to_string(),
        password: "password".to_string(),
        database_name: "mydb".to_string(),
        schema: "public".to_string(),
        logging_level: "info".to_string(),
        use_pgbouncer: false,
    };

    // 验证配置
    DatabaseService::validate_config(&config)?;

    // 创建数据库连接
    let db = DatabaseService::init(&config, None).await?;

    // 测试连接
    DatabaseService::test_connection(&db).await?;

    Ok(())
}

自定义连接选项

use secra_database::{DatabaseConfig, DatabaseService, ConnectionOptions};

let config = DatabaseConfig { /* ... */ };

let options = ConnectionOptions {
    max_connections: 100,
    min_connections: 10,
    connect_timeout: 10,
    acquire_timeout: 10,
    idle_timeout: 600,
    max_lifetime: 1800,
    sqlx_logging: true,
};

let db = DatabaseService::init(&config, Some(options)).await?;

连接池监控

use secra_database::ConnectionPoolService;

// 获取连接池统计信息(需要提供最大和最小连接数)
let stats = ConnectionPoolService::get_pool_stats(&db, Some(100), Some(5)).await?;
println!("连接池统计: {:?}", stats);

Schema 管理

use secra_database::SchemaService;

// 获取所有 Schema
let schemas = SchemaService::list_schemas(&db).await?;

// 获取指定 Schema 信息
let schema_info = SchemaService::get_schema_info(&db, "public").await?;

表管理

use secra_database::TableService;

// 获取所有表
let tables = TableService::list_tables(&db, Some("public")).await?;

// 获取表信息
let table_info = TableService::get_table_info(&db, Some("public"), "users").await?;

// 获取表列信息
let columns = TableService::get_table_columns(&db, Some("public"), "users").await?;

模块说明

  • connection: 数据库连接管理,包括配置、连接创建和验证
  • pool: 连接池管理和统计
  • schema: Schema 管理(PostgreSQL)
  • table: 表信息查询和管理
  • models: 数据库模型相关功能

配置说明

DatabaseConfig

  • database_type: 数据库类型("postgres", "mysql", "sqlite")
  • host: 数据库主机地址
  • port: 数据库端口
  • username: 数据库用户名
  • password: 数据库密码
  • database_name: 数据库名称
  • schema: 默认 Schema(PostgreSQL,默认为 "public")
  • logging_level: 日志级别("off", "error", "warn", "info", "debug", "trace")
  • use_pgbouncer: 是否使用 PgBouncer(默认为 false)

ConnectionOptions

  • max_connections: 最大连接数(默认 300)
  • min_connections: 最小连接数(默认 5)
  • connect_timeout: 连接超时时间(秒,默认 8)
  • acquire_timeout: 获取连接超时时间(秒,默认 8)
  • idle_timeout: 空闲连接超时时间(秒,默认 600)
  • max_lifetime: 连接最大生命周期(秒,默认 1800)
  • sqlx_logging: 是否启用 SQL 日志(默认 true)

安全性

  • ✅ Schema 名称验证,防止 SQL 注入
  • ✅ URL 编码,确保特殊字符正确处理
  • ✅ 配置验证,确保输入有效性
  • ✅ 日志脱敏,避免密码泄露

支持的数据库

  • PostgreSQL(完整支持)
  • MySQL(基本支持)
  • SQLite(基本支持)

运行示例

项目包含多个示例代码,演示如何使用库的各种功能:

# 基本连接示例
cargo run --example basic_connection

# 自定义连接选项示例
cargo run --example custom_options

# 连接池监控示例
cargo run --example pool_monitoring

注意:运行示例前,请确保:

  1. 已安装并运行相应的数据库(PostgreSQL/MySQL/SQLite)
  2. 修改示例中的数据库连接配置(主机、端口、用户名、密码等)

运行测试

# 运行所有测试
cargo test

# 运行特定模块的测试
cargo test --lib connection

许可证

[在此添加许可证信息]

贡献

欢迎提交 Issue 和 Pull Request!

Commit count: 0

cargo fmt