0

我在我的项目中使用 sql alchemy。

当两个或多个表连接或具有外键关系时,我遇到一个问题,然后我无法在 where 条件下查询连接的表属性。

例如。我有通知表和用户表 user.id 是 notice.sender 的外键现在我想通过 user.name 搜索通知

  1. 通知表:[id, sender(FK user.id), receiver(FK user.id), subject, message, status]

  2. 用户表:[id, name, email, address, status]

加入通知模型:

 sender_user = relationship('User', primaryjoin='Notice.sender==user.id', backref=backref("sender_user"))
 receiver_user = relationship('User', primaryjoin='Notice.receiver==user.id', backref=backref("receiver_user")) 

SQL alchemy 过滤器查询:

  user_name='john'

  notice=db_session.query(Notice) 
  notice = notice.filter(Notice.sender_user.name == user_name)

以下查询不起作用:

  notice=db_session.query(Notice) 
  notice = notice.filter(Notice.user.name == user_name)

请帮忙!

4

1 回答 1

0

您需要获取一个会话对象,然后执行:

query = session.query(Notice).filter(Notice.sender_user.name == user_name)
results = query.all()

如果这不起作用(您没有得到预期的结果),请尝试这样做:

session.query(Notice, User.name).filter((Notice.sender_user.id == User.id) & (User.name == user_name))
results = query.all()

我想您还有一个名为的字段sender,它是用户的 id。然后,这也应该有效:

session.query(Notice, User.name).filter((Notice.sender == User.id) & (User.name == user_name))

重试所有这些,我做了一些小的修改。(您可以在修订历史中看到它们)。如果他们不工作会很奇怪......(如果他们不工作,请尝试在SQLAlchemy 邮件列表上发布问题)

于 2012-05-19T10:09:32.717 回答