В Sqlalchemy, если я добавляю объект с помощью session.add () и очищаю его, session.query () не дает этот объект, почему? - PullRequest
0 голосов
/ 02 августа 2010

При использовании SQLAlchemy я добавляю объект в сеанс с помощью session.add (objname), а затем либо явно очищаю его, используя session.flush, либо включаю autoflush = True при создании самого движка.сеанс, если я хочу вернуть этот объект через session.query (classname) .all (), я не могу получить его.

Почему это так?или есть способ, с помощью которого query () также может получить очищенные объекты.

1 Ответ

7 голосов
/ 02 августа 2010

Я не могу воспроизвести вашу проблему.Пожалуйста, предоставьте пример кода, который я могу запустить, чтобы воспроизвести его.

Вот код, который выполняет то, что вы описываете, но ведет себя так, как и следовало ожидать:

from sqlalchemy import Column, Integer, Unicode, create_engine
from sqlalchemy.orm import create_session
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite://')
Base = declarative_base(bind=engine)

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(Unicode(60))

Base.metadata.create_all()   

После этой настройки добавьте нового пользователя:

s = create_session(autocommit=False, autoflush=False)
u = User()
u.name = u'Cheezo'
s.add(u)
s.flush()

Затем запросить обратно:

>>> u2 = s.query(User).first()
>>> print u2.name
Cheezo
>>> u2 is u
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...