""" 多数据库建表 + 种子数据脚本(方案 A) ============================================================= 在任何受支持的数据库(mysql/pgsql/mssql/sqlite/oracle)上初始化系统: 1. 按 .env 的 DB_DRIVER 连接目标库 2. db.create_all() 建全部表(方言中立,各库通用) 3. 写入种子数据(admin 超管、角色、基础菜单/字典/配置) 用法: # 切换数据库只需改 .env(DB_DRIVER + 账号),然后执行: python scripts/setup_db.py # 仅补种子(表已存在) python -c "from scripts.setup_db import seed_only; seed_only()" """ import logging import os import sys # 将项目根加入 sys.path(脚本以 `python scripts/xxx.py` 运行时 cwd 是 scripts/) ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if ROOT not in sys.path: sys.path.insert(0, ROOT) from src.app import create_app # noqa: E402 from src.core.database import db # noqa: E402 from config import DatabaseConfig, friendly_db_error # noqa: E402 logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s") def setup_database(): """建表 + 种子(连接失败时给出友好中文提示)""" app = create_app() print(f"目标数据库: {DatabaseConfig.SQLALCHEMY_DATABASE_URI}") try: with app.app_context(): db.create_all() print("已建表(create_all)") from scripts.seed_data import seed_all seed_all() except Exception as e: raise SystemExit(f"建表/初始化失败:{friendly_db_error(e)}") def seed_only(): """仅补种子数据(表已存在时)""" app = create_app() with app.app_context(): from scripts.seed_data import seed_all seed_all() if __name__ == "__main__": setup_database()