在服务器上我使用Tornado和SQLAlchemy的组合(可能SQLAlchemy不是异步服务器的最佳选择,但它是临时的)我将项目和处理程序拆分为10个文件/模块。
在每个模块中,我使用session = Session()
和session
来查询数据库。
每个模块的共同部分看起来像
...
import tornado.ioloop
engine = create_engine(DB_URL, echo=False, pool_size=100, pool_recycle=3600)
Session = sessionmaker(bind=engine)
class BaseHandler(tornado.web.RequestHandler):
....
我需要以某种方式设置
engine = create_engine(DB_URL, echo=False, pool_size=100, pool_recycle=3600)
Session = sessionmaker(bind=engine)
就像单身,不是在每个模块中创建,或者这是做事和创建会话的好方法。
答案 0 :(得分:2)
您可能希望使用基本上充当线程本地单例的scoped_session
,使用提供的工厂函数按需创建会话。
在您写的所有其他人导入的模块中:
engine = create_engine(DB_URL, echo=False, pool_size=100, pool_recycle=3600)
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
# or make it a Tornado Application property
然后使用Session
作为显式工厂:
session = Session()
session.query(...)
或使用隐式方法委派:
Session.query(...)