Ответ 1
Лучше использовать API проверки:
from sqlalchemy import inspect
state = inspect(obj)
# Booleans
state.transient
state.pending
state.detached
state.persistent
Это: Вступление в состояния объектов перечисляет четыре перестановки присутствия в БД/присутствие в сеансе:
transient, pending, persistent & detached
Есть ли способ запросить заданный объект для возврата того из четырех состояний, в котором находится объект?
Я попытался укорениться в _sa_instance_state
, но не смог найти что-либо релевантное.
Спасибо!
Лучше использовать API проверки:
from sqlalchemy import inspect
state = inspect(obj)
# Booleans
state.transient
state.pending
state.detached
state.persistent
[Обновить: этот ответ для версий до 0.8]
Нашел здесь:
from sqlalchemy.orm import object_session
from sqlalchemy.orm.util import has_identity
# transient:
object_session(obj) is None and not has_identity(obj)
# pending:
object_session(obj) is not None and not has_identity(obj)
# detached:
object_session(obj) is None and has_identity(obj)
# persistent:
object_session(obj) is not None and has_identity(obj)
Другой вариант object_state, перенастройка InstanceState:
from sqlalchemy.orm.util import object_state
state = object_state(obj)
# here are the four states:
state.transient # !session & !identity_key
state.pending # session & !identity_key
state.persistent # session & identity_key
state.detached # !session & identity_key
# and low-level attrs
state.identity_key
state.has_identity # bool(identity_key)
state.session
другая опция, которая отображает ВСЕ объекты в определенных состояниях в сеансе: http://docs.sqlalchemy.org/en/latest/orm/session.html#session-attributes
# pending objects recently added to the Session
session.new
# persistent objects which currently have changes detected
# (this collection is now created on the fly each time the property is called)
session.dirty
# persistent objects that have been marked as deleted via session.delete(obj)
session.deleted
# dictionary of all persistent objects, keyed on their
# identity key
session.identity_map