Я новичок в sqlalchemy, и мне кажется, что я до сих пор пропустил несколько фундаментальных концепций. Я хочу использовать sqlalchemy для обработки взаимодействия db в многопоточном веб-приложении.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 Чтение, это говорит
Объект ScopedSession по умолчанию использует [threading.local()] в качестве хранилища, так что одна сессия сохраняется для всех, призывающих реестра ScopedSession, но только в рамках одного потока. Абоненты, которые обращаются к реестру в другом потоке, получают экземпляр сеанса, который является локальным для этого другого потока.
поэтому «Абоненты, которые обращаются к реестру в другом потоке, получают экземпляр сеанса, который является локальным для этого другого потока».
Как экземпляр сеанса локальный, если я никогда не говорил ему, к какому запросу он связан?