Форум сайта python.su
Есть модель, к примеру User, в коде самого приложения используется так:
...
u = User.query.filter_by(status=UNPROCESSED).one()
...
...
u = User.get_next_unprocessed()
..
Офлайн
Можно
Офлайн
j2aок. спасибо ;-)
Можно
...
import schema as s
...
class User(OrmObject):
@classmethod
def get_next_unprocessed(cls):
user = cls.query.from_statement("select * from %s "
"where status=:status for update" % s.users.name).\
params(status=ST_UNPROCESSED).first()
if user:
session = object_session(user)
user.status = ST_HZ
session.commit()
return user
Session.mapper(Users, s.users)
Офлайн
Я не знаю что такое “for update” :-).
Во всем остальном не вижу проблемы, но я часто передаю session=None в подобные методы. В таком случае, либо используется переданная в параметрах сессия, либо создается локальная.
> User.query
С таким не сталкивался. Пойду читать документацию. Сессия создаётся во время запроса?
Я просто знаю, что если на сессию нет ссылок она уничтожается (нормальное поведение Python-объектов) и все ассоциированные объекты (результат запроса user) отвязываются от этой сессии. Соответственно ты не сможешь получить сессию через object_session.
..bw
Офлайн
Мдаа. С SQLAlchemy работал с бородатой 0.1 версии, но после каждого нового релиза выползают неизведанные возможности. И чтение CHANGES не всегда помогает.
object_session проскользнул мимо…
Спасибо.
Офлайн
> object_session проскользнул мимо…
Получается я не один такой :-).
..bw
Офлайн
bwЧто то вроде того. http://www.sqlalchemy.org/docs/04/session.html#unitofwork_contextual_associating
> User.query
С таким не сталкивался. Пойду читать документацию. Сессия создаётся во время запроса?
Офлайн
Припоминаю. Я пропустил эту часть, так как предпочитаю создавать сессии явно.
Напоминает работу с Django ORM, почему мне Django и не нравится, отчасти по этому.
> Я просто знаю, что если на сессию нет ссылок она уничтожается
С такими сессиями этого не будет происходить.
..bw
Офлайн