本数据库封装库支持多数据库操作,可以通过装饰器参数快速切换不同的数据库,而无需在每个函数调用中手动传递数据库参数。
- 多数据库配置:支持配置多个数据库连接
- 装饰器切换:通过装饰器参数指定目标数据库
- 线程安全:每个线程可以独立设置当前数据库
- 无缝集成:与现有CRUD操作完全兼容
from db import db_manager
# 添加多个数据库配置
db_manager.add_database("default", "sqlite:///./default.db")
db_manager.add_database("analytics", "sqlite:///./analytics.db")
db_manager.add_database("logs", "sqlite:///./logs.db")from db import transactional
@transactional("analytics")
def create_analytics_user(db: Session, name: str, email: str):
"""在分析数据库中创建用户"""
user = User.create(db, name=name, email=email, age=25)
return user.idfrom db import with_db_session
@with_db_session("logs")
def log_user_action(db: Session, user_id: int, action: str):
"""在日志数据库中记录用户操作"""
log = UserActionLog.create(db, user_id=user_id, action=action)
return log.idfrom db import db_manager
# 设置当前线程的数据库
db_manager.set_current_db_name("analytics")
# 获取指定数据库的会话
with db_manager.get_db_session("analytics") as db:
users = User.get_all(db)from db import db_manager, transactional, with_db_session
from db.example_models import User
from sqlalchemy.orm import Session
# 配置数据库
db_manager.add_database("default", "sqlite:///./default.db")
db_manager.add_database("analytics", "sqlite:///./analytics.db")
# 在默认数据库中创建用户
@transactional("default")
def create_user_default(db: Session, name: str, email: str):
return User.create(db, name=name, email=email, age=25)
# 在分析数据库中创建用户
@transactional("analytics")
def create_user_analytics(db: Session, name: str, email: str):
return User.create(db, name=name, email=email, age=30)
# 查询默认数据库中的用户
@with_db_session("default")
def list_users_default(db: Session):
return User.get_all(db)
# 查询分析数据库中的用户
@with_db_session("analytics")
def list_users_analytics(db: Session):
return User.get_all(db)每个数据库完全独立,数据不会互相干扰:
# 可以在不同数据库中创建同名用户
@transactional("default")
def create_user_default(db: Session, name: str):
return User.create(db, name=name, email=f"{name}@default.com")
@transactional("analytics")
def create_user_analytics(db: Session, name: str):
return User.create(db, name=name, email=f"{name}@analytics.com")- 数据库配置需要在使用前完成
- 每个数据库需要单独创建表结构
- 装饰器参数是可选的,省略时使用默认数据库
- 线程安全:每个线程独立维护数据库选择状态