1
我正在學習python,並使用框架金字塔和sqlalchemy作爲orm。我無法弄清楚關係是如何工作的。我有2個桌子,辦公室和用戶。外鍵在用戶表'offices_id'上。我試圖做一個查詢,將返回給我一個用戶是什麼辦公室的一部分。如何編寫查詢以獲取關係中的sqlalchemy對象?
這是我如何設置我的模型。
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Unicode(255), unique=True, nullable=False)
trec_number = Column(Unicode(255), unique=True, nullable=False)
office_id = Column(Integer, ForeignKey('offices.id'))
class Office(Base):
__tablename__ = 'offices'
id = Column(Integer, primary_key=True)
name = Column(Unicode(255), unique=True, nullable=False)
address = Column(Unicode(255), unique=True, nullable=False)
members = relationship("User", backref='offices')
在我看來,我怎麼會寫的查詢將返回辦公室信息給定用戶?
我想這一點:
for user in DBSession.query(User).join(Office).all():
print user.address
,但我想我誤解了查詢的工作,因爲我不斷收到錯誤
AttributeError: 'User' object has no attribute 'address'
當我這樣做:
for user in DBSession.query(User).join(Office).all():
print user.name
它打印出用戶名稱很好,因爲name是User類的一個屬性。
我也無法得到逆工作
for offices in DBSession.query(Office).join(User).all():
print offices.users.name
stackoverflow需要買一個啤酒按鈕。謝謝,工作完美。 – 2013-05-08 22:49:50
現在我被困在做反面。 DBSession.query(Office).join(User).all(): offices.user.name不起作用。 – 2013-05-09 14:40:23
模型上的屬性是名稱成員,你有沒有試過offices.members?這應該給你一個列表而不是單個對象,因爲它是一對多的關係。 – 2013-05-09 14:44:43