在使用SQLAlchemy时,我使用session.add(objname)向会话添加一个对象,然后使用session.flush显式刷新它,或者在创建引擎时启用autoflush = True。
现在在会话中,如果想通过session.query(classname).all()返回该对象,我无法检索它。
为什么会这样?或者有没有一种方法,query()也可以检索刷新的对象。
答案 0 :(得分:7)
我无法重现您的问题。请提供我可以运行的示例代码来重现它。
这是执行您所描述内容的代码,但行为与预期的一样:
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