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