25 lines
969 B
Python
25 lines
969 B
Python
import asyncio
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
from database.models import Base
|
|
from config import settings
|
|
from utils.logger import session_logger
|
|
import urllib.parse
|
|
|
|
async def init_db():
|
|
"""初始化数据库,创建所有表"""
|
|
try:
|
|
encoded_password = urllib.parse.quote_plus(settings.db_password)
|
|
connection_string = f"mysql+aiomysql://{settings.db_user}:{encoded_password}@{settings.db_host}:{settings.db_port}/{settings.db_name}"
|
|
engine = create_async_engine(
|
|
connection_string,
|
|
echo=settings.db_echo
|
|
)
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
await engine.dispose()
|
|
session_logger.info("system", "database", "数据库表已成功创建")
|
|
return True
|
|
except Exception as e:
|
|
session_logger.error("system", "database", f"创建数据库表失败: {str(e)}")
|
|
return False
|