繁体   English   中英

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

[英]How do I write a query to get sqlalchemy objects from relationship?

我正在学习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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM