db.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import sessionmaker, declarative_base
  3. from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
  4. import os
  5. from dotenv import load_dotenv
  6. # 加载环境变量
  7. load_dotenv()
  8. # 数据库连接配置
  9. DATABASE_URL = os.getenv(
  10. "DATABASE_URL",
  11. "mysql+pymysql://wqsd:wqsd%402025@knowledge.rwlb.rds.aliyuncs.com:3306/ai_knowledge?charset=utf8&connect_timeout=60&read_timeout=300&write_timeout=300"
  12. )
  13. # 创建同步引擎和会话
  14. engine = create_engine(
  15. DATABASE_URL,
  16. pool_size=10,
  17. max_overflow=20,
  18. pool_timeout=60, # 增加池连接超时时间
  19. pool_recycle=1800, # 减少连接回收时间,单位为秒,防止连接长时间占用
  20. pool_pre_ping=True, # 添加连接前ping测试,确保连接有效
  21. echo=False, # 设为True可查看SQL日志
  22. connect_args={
  23. "connect_timeout": 60, # 连接超时时间
  24. "read_timeout": 300, # 读取超时时间
  25. "write_timeout": 300, # 写入超时时间
  26. }
  27. )
  28. SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
  29. # 声明基类
  30. Base = declarative_base()
  31. # 获取数据库会话的依赖函数
  32. def get_db():
  33. db = SessionLocal()
  34. try:
  35. yield db
  36. finally:
  37. db.close()