|
|
""" |
|
|
数据库初始化模块 |
|
|
""" |
|
|
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 |
|
|
|