我是sqlalchemy的新手,看起来我仍然错过了几个基本概念。我想使用sqlalchemy来处理多线程Web应用程序中的数据库交互。SQLAlchemy:如何将作用域会话绑定到请求
于是我开始
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
engine = create_engine('mysql://mydb')
session_factory = sessionmaker(autocommit = False,
autoflush = False,
bind = engine)
Session = scoped_session(session_factory)
我使用MoinMoin
维基处理该请求,所以我有一个包含请求的对象macro.request
。
我现在有一个方法,在某些类,说
def do_sth():
session = Session()
# use the session to get some data from the db
在哪里,我怎么知道哪些请求它链接到
Session
对象?
阅读Multi-threaded use of SQLAlchemy,它说
默认情况下会[threading.local()]作为存储,从而使单个会话保持所有谁呼吁ScopedSession注册表,但ScopedSession对象只在单个线程的范围内。在另一个线程中调用注册表的调用者会获得一个对其他线程本地的Session实例。
so“在不同线程中调用注册表的调用者将获得一个本地于该其他线程的Session实例。”
如果我从来没有告诉它会将它连接到哪个请求,Session实例如何是本地的?