数据库自动初始化功能允许在应用启动时自动配置和初始化多个数据库,无需在每次使用时手动初始化。
- 自动配置:应用启动时自动加载数据库配置
- 表自动创建:自动为所有配置的数据库创建表结构
- 环境变量支持:通过环境变量配置数据库连接
- 零配置使用:初始化后可直接使用数据库功能
数据库配置可以通过环境变量或程序化方式定义:
import os
# 数据库配置
DATABASE_CONFIG = {
"default": os.getenv("DATABASE_URL", "sqlite:///./app.db"),
"analytics": os.getenv("ANALYTICS_DATABASE_URL", "sqlite:///./analytics.db"),
"logs": os.getenv("LOGS_DATABASE_URL", "sqlite:///./logs.db"),
}
# 是否在初始化时自动创建表
AUTO_CREATE_TABLES = os.getenv("AUTO_CREATE_TABLES", "true").lower() == "true"可以通过以下环境变量自定义数据库配置:
DATABASE_URL- 默认数据库连接URLANALYTICS_DATABASE_URL- 分析数据库连接URLLOGS_DATABASE_URL- 日志数据库连接URLAUTO_CREATE_TABLES- 是否自动创建表(默认为true)
数据库在应用启动时自动初始化,可直接使用:
from db import transactional, with_db_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_analytics_users(db: Session):
return User.get_all(db)可以通过程序化方式自定义数据库配置:
# 自定义配置
DATABASE_CONFIG = {
"default": "sqlite:///./my_app.db",
"analytics": "postgresql://user:pass@localhost/analytics",
"logs": "mysql://user:pass@localhost/logs",
}如果需要手动控制初始化过程,可以禁用自动初始化:
export AUTO_CREATE_TABLES=false然后在代码中手动调用:
from db import initialize_databases
# 手动初始化
initialize_databases(DATABASE_CONFIG)# examples/db_auto_init_example.py
from db import transactional, with_db_session
from db.example_models import User
from sqlalchemy.orm import Session
@transactional("default")
def create_user_default(db: Session, name: str, email: str):
"""在默认数据库中创建用户"""
return User.create(db, name=name, email=email, age=25)
@with_db_session("analytics")
def list_users_analytics(db: Session):
"""列出分析数据库中的所有用户"""
return User.get_all(db)
# 直接使用,无需初始化
user_id = create_user_default("Alice", "alice@example.com")
users = list_users_analytics()- 数据库配置在应用启动时加载,运行时修改配置文件不会生效
- 表结构基于模型定义自动创建
- 如果禁用了自动创建表功能,需要手动调用
create_tables()方法 - 确保数据库文件路径有写入权限