我正在学习python并使用框架金字塔和sqlalchemy作为orm。我无法弄清楚人际关系是如何运作的。我有2个桌子,办公室和用户。外键位于用户表'offices_id'上。我正在尝试进行一个查询,它将返回给我一个用户所属的办公室。
这就是我设置模型的方法。
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
答案 0 :(得分:3)
您需要使用您在backref
参数中使用的名称来访问Office
模型。试试user.offices.address