from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from models import Base, User, UserRole import os from dotenv import load_dotenv load_dotenv() DATABASE_URL = f"postgresql://{os.getenv('DATABASE_USERNAME')}:{os.getenv('DATABASE_PASSWORD')}@{os.getenv('DATABASE_HOSTNAME')}:{os.getenv('DATABASE_PORT')}/{os.getenv('DATABASE_NAME')}" engine = create_engine( DATABASE_URL, pool_size=10, max_overflow=20, pool_timeout=30, pool_recycle=3600, pool_pre_ping=True ) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def get_db(): db = SessionLocal() try: yield db finally: db.close() def init_db(): Base.metadata.create_all(bind=engine) from utils import get_password_hash db = SessionLocal() try: existing_admin = db.query(User).filter(User.role == UserRole.ADMIN).first() if not existing_admin: default_admin = User( username="admin", email="admin@example.com", password_hash=get_password_hash("admin123"), full_name="系统管理员", role=UserRole.ADMIN ) db.add(default_admin) db.commit() print("默认管理员账户已创建 - 用户名: admin, 密码: admin123") finally: db.close() if __name__ == "__main__": print("正在创建数据库表...") init_db() print("数据库表创建完成!")