Files
012-kaopeilian/backend/app/config/database.py
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

50 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""数据库配置"""
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
from sqlalchemy.pool import NullPool
from app.core.config import get_settings
settings = get_settings()
# 创建异步引擎
if settings.DEBUG:
# 开发环境使用 NullPool不需要连接池参数
engine = create_async_engine(
settings.DATABASE_URL,
echo=False,
pool_pre_ping=True,
poolclass=NullPool,
# 确保 MySQL 连接使用 UTF-8 字符集
connect_args={
"charset": "utf8mb4",
"use_unicode": True,
"autocommit": False,
"init_command": "SET character_set_client=utf8mb4, character_set_connection=utf8mb4, character_set_results=utf8mb4, collation_connection=utf8mb4_unicode_ci",
} if "mysql" in settings.DATABASE_URL else {},
)
else:
# 生产环境使用连接池
engine = create_async_engine(
settings.DATABASE_URL,
echo=False,
pool_size=20,
max_overflow=0,
pool_pre_ping=True,
# 确保 MySQL 连接使用 UTF-8 字符集
connect_args={
"charset": "utf8mb4",
"use_unicode": True,
"autocommit": False,
"init_command": "SET character_set_client=utf8mb4, character_set_connection=utf8mb4, character_set_results=utf8mb4, collation_connection=utf8mb4_unicode_ci",
} if "mysql" in settings.DATABASE_URL else {},
)
# 创建异步会话工厂
SessionLocal = async_sessionmaker(
engine,
class_=AsyncSession,
expire_on_commit=False,
autocommit=False,
autoflush=False,
)