Spaces:
Running
Running
""" | |
数据库初始化模块 | |
""" | |
from dotenv import dotenv_values | |
from sqlalchemy import inspect | |
from sqlalchemy.orm import Session | |
from app.database.connection import engine, Base | |
from app.database.models import Settings | |
from app.log.logger import get_database_logger | |
logger = get_database_logger() | |
def create_tables(): | |
""" | |
创建数据库表 | |
""" | |
try: | |
# 创建所有表 | |
Base.metadata.create_all(engine) | |
logger.info("Database tables created successfully") | |
except Exception as e: | |
logger.error(f"Failed to create database tables: {str(e)}") | |
raise | |
def import_env_to_settings(): | |
""" | |
将.env文件中的配置项导入到t_settings表中 | |
""" | |
try: | |
# 获取.env文件中的所有配置项 | |
env_values = dotenv_values(".env") | |
# 获取检查器 | |
inspector = inspect(engine) | |
# 检查t_settings表是否存在 | |
if "t_settings" in inspector.get_table_names(): | |
# 使用Session进行数据库操作 | |
with Session(engine) as session: | |
# 获取所有现有的配置项 | |
current_settings = {setting.key: setting for setting in session.query(Settings).all()} | |
# 遍历所有配置项 | |
for key, value in env_values.items(): | |
# 检查配置项是否已存在 | |
if key not in current_settings: | |
# 插入配置项 | |
new_setting = Settings(key=key, value=value) | |
session.add(new_setting) | |
logger.info(f"Inserted setting: {key}") | |
# 提交事务 | |
session.commit() | |
logger.info("Environment variables imported to settings table successfully") | |
except Exception as e: | |
logger.error(f"Failed to import environment variables to settings table: {str(e)}") | |
raise | |
def initialize_database(): | |
""" | |
初始化数据库 | |
""" | |
try: | |
# 创建表 | |
create_tables() | |
# 导入环境变量 | |
import_env_to_settings() | |
except Exception as e: | |
logger.error(f"Failed to initialize database: {str(e)}") | |
raise | |