【发布时间】:2017-03-12 18:00:30
【问题描述】:
我是 sqlalchemy 的新手,似乎我仍然错过了几个基本概念。我想使用 sqlalchemy 处理多线程 Web 应用程序中的数据库交互。
所以我开始
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 wiki,所以我有一个包含请求的对象macro.request。
我现在在某个类中有一个方法,比如说
def do_sth():
session = Session()
# use the session to get some data from the db
我在哪里以及如何告诉
Session对象它链接到哪个请求?
阅读Multi-threaded use of SQLAlchemy,它说
ScopedSession 对象默认使用 [threading.local()] 作为存储,以便为所有调用 ScopedSession 注册表的人维护一个 Session,但仅限于单个线程的范围内。在不同线程中调用注册表的调用者会获得该其他线程本地的 Session 实例。
所以“在不同线程中调用注册表的调用者会获得一个该其他线程本地的 Session 实例。”
如果我从未告诉它链接到哪个请求,Session 实例如何是本地的?
【问题讨论】:
标签: python session sqlalchemy