Я использую SQlAlchemy в своем веб-проекте. Что мне следует использовать - scoped_session (sessionmaker ())
или простой sessionmaker ()
- и почему? Или я должен использовать что-то другое?
## model.py
from sqlalchemy import *
from sqlalchemy.orm import *
engine = create_engine('mysql://dbUser:dbPassword@dbServer:dbPort/dbName',
pool_recycle=3600, echo=False)
metadata = MetaData(engine)
Session = scoped_session(sessionmaker())
Session.configure(bind=engine)
user = Table('user', metadata, autoload=True)
class User(object):
pass
usermapper = mapper(User, user)
## some other python file called abc.py
from models import *
def getalluser():
session = Session()
session.query(User).all()
session.flush()
session.close()
## onemore file defg.py
from models import *
def updateuser():
session = Session()
session.query(User).filter(User.user_id == '4').update({User.user_lname: 'villkoo'})
session.commit()
session.flush()
session.close()
Я создаю объект session = Session ()
для каждого запроса и закрываю его. Правильно ли я поступаю или есть способ сделать это лучше?
Scoped_session для каждого метода, поскольку он даст вам поток локального сеанса, который вы не можете получить заранее (как на уровне модуля). Нет необходимости открывать новый сеанс в каждом методе, вы можете использовать глобальный сеанс, создать сеанс, только когда глобальный сеанс недоступен. Т.е. вы можете написать метод, который возвращает сессию, и добавить его в init .py внутри вашего пакета.
Я сам в этом разбираюсь, но я не эксперт.
Мои три замечания: (i) Документы по SQLAlchemy предоставляют предложенный подход с использованием scoped_session, согласно приведенному выше комментарию г-на Клюева, по этой ссылке: http://docs.sqlalchemy.org/en/rel_0_9/ ОРМ / session.html # используя-нить локальной области видимости-с-веб-приложений . (ii) В этом месте в документации SQLAlchemy также говорится, что «... настоятельно рекомендуется использовать инструменты интеграции, предоставляемые с самой веб-платформой, если они доступны, вместо scoped_session». (iii) Flask-SQLAlchemy, например, утверждает, что позаботился об этом: http://pythonhosted.org/Flask-SQLAlchemy/quickstart.html#a-minimal-application