58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""
|
||
多数据库建表 + 种子数据脚本(方案 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()
|