如何编写查询以从关系中获取sqlalchemy对象?



我正在学习python并使用以sqlalchemy为形式的框架金字塔。我搞不懂感情是怎么回事。我有两张桌子,办公室和用户。外键位于用户表"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

您需要使用在backref参数中使用的名称来访问Office模型。试试user.offices.address

最新更新