from sqlmodel import create_engine, SQLModel from sqlalchemy.pool import QueuePool from sqlalchemy import text from app.models import UserRole, OrderStatus import time def wait_for_db(max_retries=5, delay=5): """等待数据库连接可用""" for i in range(max_retries): try: test_engine = create_engine( "mysql+pymysql://root:123456@niit-node3/orders_db", poolclass=QueuePool, pool_size=10, max_overflow=20, pool_timeout=30, pool_recycle=3600, echo=False ) with test_engine.connect() as conn: conn.execute(text("SELECT 1")) print(f"数据库连接测试成功 (尝试 {i+1}/{max_retries})") return test_engine except Exception as e: if i == max_retries - 1: raise time.sleep(delay) return None # 使用连接池的数据库引擎 engine = wait_for_db() # 创建数据库表 def init_db(): SQLModel.metadata.create_all(engine)