| """ |
| 数据库初始化模块 |
| """ |
| 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_values = dotenv_values(".env") |
| |
| |
| inspector = inspect(engine) |
| |
| |
| if "t_settings" in inspector.get_table_names(): |
| |
| 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 |
|
|