# Secra Database
一个基于 SeaORM 的 Rust 数据库连接和管理库,提供数据库连接、连接池、Schema 和表管理功能。
## 功能特性
- ✅ 数据库连接管理(PostgreSQL、MySQL、SQLite)
- ✅ 连接池管理和监控
- ✅ Schema 管理(PostgreSQL)
- ✅ 表信息查询和管理
- ✅ 安全的 URL 编码和配置验证
- ✅ 支持 PgBouncer
- ✅ 完整的错误处理
## 安装
在 `Cargo.toml` 中添加依赖:
```toml
[dependencies]
secra-database = { path = "../secra-database" }
# 或者从 git 仓库
# secra-database = { git = "https://github.com/your-org/secra-database" }
```
## 快速开始
### 基本连接
```rust
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(())
}
```
### 自定义连接选项
```rust
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?;
```
### 连接池监控
```rust
use secra_database::ConnectionPoolService;
// 获取连接池统计信息(需要提供最大和最小连接数)
let stats = ConnectionPoolService::get_pool_stats(&db, Some(100), Some(5)).await?;
println!("连接池统计: {:?}", stats);
```
### Schema 管理
```rust
use secra_database::SchemaService;
// 获取所有 Schema
let schemas = SchemaService::list_schemas(&db).await?;
// 获取指定 Schema 信息
let schema_info = SchemaService::get_schema_info(&db, "public").await?;
```
### 表管理
```rust
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(基本支持)
## 运行示例
项目包含多个示例代码,演示如何使用库的各种功能:
```bash
# 基本连接示例
cargo run --example basic_connection
# 自定义连接选项示例
cargo run --example custom_options
# 连接池监控示例
cargo run --example pool_monitoring
```
**注意**:运行示例前,请确保:
1. 已安装并运行相应的数据库(PostgreSQL/MySQL/SQLite)
2. 修改示例中的数据库连接配置(主机、端口、用户名、密码等)
## 运行测试
```bash
# 运行所有测试
cargo test
# 运行特定模块的测试
cargo test --lib connection
```
## 许可证
[在此添加许可证信息]
## 贡献
欢迎提交 Issue 和 Pull Request!