gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:36:30 25 4
gpt4 key购买 nike

我正在学习Python并使用框架 Pyramid ,以sqlalchemy作为orm。我不明白关系是如何运作的。我有 2 张 table 、办公室和用户。外键位于用户表“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

关于python - 如何编写查询以从关系中获取 sqlalchemy 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16450694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com