""" 数据库初始化脚本: 1. 创建所有数据库表 2. 写入默认系统配置 3. 创建管理员账号(首次运行) 用法: python init_db.py python init_db.py --admin-user admin --admin-pass AdminPass123 """ import sys import argparse from app import create_app from app.extensions import db, bcrypt from app.models.user import User from app.models.resource import Resource from app.models.setting import SystemSetting def init_db(admin_username='admin', admin_password='Admin@123456', admin_email='admin@example.com'): app = create_app('development') with app.app_context(): print('[1/3] 正在创建数据库表…') db.create_all() print(' ✓ 表结构创建完成') print('[2/3] 写入默认系统配置…') for key, (value, description) in SystemSetting.DEFAULTS.items(): if not SystemSetting.query.filter_by(key=key).first(): db.session.add(SystemSetting( key=key, value=value, description=description )) db.session.commit() print(' ✓ 系统配置写入完成') print('[3/3] 创建管理员账号…') admin = User.query.filter_by(username=admin_username).first() if admin: print(f' ✓ 管理员 "{admin_username}" 已存在,跳过') else: pw_hash = bcrypt.generate_password_hash(admin_password).decode('utf-8') admin = User( username=admin_username, email=admin_email, password_hash=pw_hash, role='admin', is_active=True ) db.session.add(admin) db.session.commit() print(f' ✓ 管理员创建成功') print(f' 用户名: {admin_username}') print(f' 密 码: {admin_password}') print(f' 邮 箱: {admin_email}') print('\n[完成] 数据库初始化成功!') print(' 运行 python run.py 启动服务') if __name__ == '__main__': parser = argparse.ArgumentParser(description='初始化数据库') parser.add_argument('--admin-user', default='admin', help='管理员用户名') parser.add_argument('--admin-pass', default='Admin@123456', help='管理员密码') parser.add_argument('--admin-email', default='admin@example.com', help='管理员邮箱') args = parser.parse_args() init_db( admin_username=args.admin_user, admin_password=args.admin_pass, admin_email=args.admin_email )