我在我的项目中使用sql炼金术。
当两个或多个表连接或具有外键关系时,我遇到一个问题,那么我无法在where where条件下查询连接表属性。
EG。我有通知表和用户表user.id是notice.sender的外键 现在我想通过user.name
搜索通知通知表:[id,发件人(FK user.id),接收者(FK user.id),主题,消息,状态]
用户表:[ID,姓名,电子邮件,地址,状态]
加入通知模型:
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炼金术过滤查询:
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)
请帮忙!
答案 0 :(得分: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 mailing list上发布问题)