db 模块设计为可独立使用的数据库操作库,除了配置依赖外,其他功能都可以快速复制到其他项目使用。
db/
├── __init__.py # 核心功能导入
├── database.py # 数据库管理器核心功能
├── decorators.py # 装饰器功能(事务处理等)
├── crud.py # CRUD操作混入类
├── models.py # 基础模型类
└── standalone_config.py # 独立使用配置示例
- DatabaseManager: 数据库管理器,支持多数据库配置
- 装饰器: transactional 和 with_db_session 用于简化数据库操作
- CRUDMixin: 提供基础的增删改查功能
- BaseModel: 基础模型类,继承CRUDMixin
将以下文件复制到新项目中:
db/
├── __init__.py
├── database.py
├── decorators.py
├── crud.py
├── models.py
└── standalone_config.py
在新项目中创建配置文件或直接在代码中配置:
from db import initialize_databases
# 数据库配置
DATABASE_CONFIG = {
"default": "sqlite:///./app.db",
"analytics": "sqlite:///./analytics.db",
}
# 初始化数据库
initialize_databases(DATABASE_CONFIG)创建自己的数据模型,继承 BaseModel:
from sqlalchemy import Column, String, Integer
from db.models import BaseModel
class User(BaseModel):
__tablename__ = 'users'
name = Column(String(50), index=True)
email = Column(String(100), unique=True, index=True)from db import transactional, with_db_session
from sqlalchemy.orm import Session
@transactional("default")
def create_user(db: Session, name: str, email: str):
return User.create(db, name=name, email=email)
@with_db_session("analytics")
def list_users(db: Session):
return User.get_all(db)DATABASE_URL: 默认数据库连接URLANALYTICS_DATABASE_URL: 分析数据库连接URLLOGS_DATABASE_URL: 日志数据库连接URLAUTO_CREATE_TABLES: 是否自动创建表(默认为true)
from db import initialize_databases
# 自定义配置
config = {
"default": "postgresql://user:pass@localhost/mydb",
"secondary": "mysql://user:pass@localhost/otherdb",
}
# 初始化
initialize_databases(config)# 指定数据库
@transactional("secondary")
def create_record(db: Session):
# 在secondary数据库中执行
pass
# 使用默认数据库
@transactional()
def create_default_record(db: Session):
# 在default数据库中执行
passfrom db import db_manager
# 获取特定数据库的会话
with db_manager.get_db_session("analytics") as db:
users = User.get_all(db)- 模型导入: 在调用
create_tables()之前,确保所有模型类已被导入 - 表创建: 如果禁用了自动创建表,需要手动调用
db_manager.create_tables() - 依赖管理: 确保目标项目包含SQLAlchemy和其他必要依赖
- 配置分离: 提供了配置示例,可根据需要自定义
my_project/
├── db/ # 复制的数据库模块
│ ├── __init__.py
│ ├── database.py
│ ├── decorators.py
│ ├── crud.py
│ ├── models.py
│ └── example_models.py
├── models/ # 自定义模型
│ └── user.py
├── main.py # 主应用
└── requirements.txt
确保目标项目包含以下依赖:
SQLAlchemy>=1.4.0从现有项目迁移时:
- 复制 db 目录到新项目
- 移除 example_models.py(仅用于示例)
- 根据需要调整配置
- 创建自己的数据模型
- 开始使用数据库功能