You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
from typing import *
|
|
|
|
|
|
|
|
|
|
import sqlalchemy.orm
|
|
|
|
|
|
|
|
|
|
import config
|
|
|
|
|
|
|
|
|
|
_engine: Optional[sqlalchemy.Engine] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrmBase(sqlalchemy.orm.DeclarativeBase):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def init(_debug):
|
|
|
|
|
cfg = config.get_config()
|
|
|
|
|
global _engine
|
|
|
|
|
_engine = sqlalchemy.create_engine(
|
|
|
|
|
cfg.database_url,
|
|
|
|
|
pool_size=5, # 保持的连接数
|
|
|
|
|
max_overflow=5, # 临时的额外连接数
|
|
|
|
|
pool_timeout=3, # 连接数达到最大时获取新连接的超时时间
|
|
|
|
|
# pool_pre_ping=True, # 获取连接时先检测是否可用
|
|
|
|
|
pool_recycle=60 * 60, # 回收超过1小时的连接,防止数据库服务器主动断开不活跃的连接
|
|
|
|
|
# echo=debug, # 输出SQL语句
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
OrmBase.metadata.create_all(_engine)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_session() -> sqlalchemy.orm.Session:
|
|
|
|
|
return sqlalchemy.orm.Session(_engine)
|