我有两个 SQLALchemy 模型,它们之间存在多对多关系:
class Contact(db.Model):
id = db.Column(db.Integer, primary_key=True)
customer_id = db.Column(db.Integer)
users = db.relationship(ContactUser, cascade='all, delete-orphan')
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
class ContactUser(db.Model):
contact_id = db.Column(db.Integer, db.ForeignKey('contact.id'),
primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'),
primary_key=True)
user = db.relationship(User)
我想转换这个 SQL:
SELECT
c.*
FROM
contact c LEFT JOIN
user_contact uc ON c.id = uc.contact_id AND uc.user_id='456'
WHERE
c.customer_id = '123' AND
uc.contact_id IS NULL
进入一个 SQLAlchemy 查询,我可以在其中指定customer_id
和user_id
.
我不知道如何告诉 SQLAlchemy 添加AND uc.user_id='456'
到 ON 子句。
当前查询:
contacts = (Contact.query.join(ContactUser)
.filter(Contact.customer_id == customer.id)
.filter(ContactUser.contact_id == None)
文档提到了一些关于能够使用“加入的两个参数调用”的内容,但似乎只允许我指定一件事,并且我的 ON 子句中需要两个。
另外,我认为我需要使用outerjoin
而不是join
?