gpt4 book ai didi

python - flask-sqlalchemy:查询一个表中的记录,在另一个表中没有相关记录(或某个值的记录)

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:22 24 4
gpt4 key购买 nike

我正在编写一个简单的应用程序来帮助人们给选民打电话。我不希望我的志愿者不止一次骚扰任何选民。我怎样才能得到一份尚未被点名的选民名单?我正在使用带有 flask-sqlalchemy 的 flask 。

选民模型:

    class Voter(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
phone = db.Column(db.String(20))
vanid = db.Column(db.String(20))
address = db.Column(db.String(255))
city = db.Column(db.String(255))
zip_code = db.Column(db.String(20))
lat = db.Column(db.Float)
lng = db.Column(db.Float)
...

调用模型:

    class Call(db.Model):
id = db.Column(db.Integer, primary_key=True)
voter_id = db.Column(db.Integer, db.ForeignKey('voter.id'))
voter = db.relationship('Voter', backref=db.backref('calls', lazy='dynamic'))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User', backref=db.backref('calls', lazy='dynamic'))
time = db.Column(db.DateTime)
status_code = db.Column(db.String(20))
...

call.status_code 将包含 completed、busy、wrong_number 等值

我想获得一份所有有资格被召集的选民的名单,以便我可以选择一个为志愿者服务。 (ie. call.status_code != completed etc. OR 没有相关通话记录)

如果要在原始 SQL 中执行此操作,我可能会这样做:

Select [whatever]
FROM Voter v
LEFT JOIN Call c on c.voter_id = v.id
WHERE c.status_code IS NULL OR c.status_code = 'busy'

我无法在 sqlalchemy 中弄清楚。有什么见解吗?

最佳答案

你可能会使用类似的东西:

required_voters = db.session.query(Voter).outerjoin(Call).filter((Call.voter_id == None) | (Call.status_code != 'completed'))

编辑

建议查询:

vwcc = db.session.query(distinct(Call.voter_id)).filter(Call.status_code == 'completed').subquery()
this will select all unique voters with completed calls

现在是主要部分

required_voters = db.session.query(Voter).outerjoin(Call).outerjoin(vwcc,vwcc.voter_id == Voter.id) ).filter((vwcc.voter_id == None) & ((Call.voter_id ==无)|(Call.status_code!='完成')))

我相信这将选择所有选民:- 没有完成状态的调用和- 没有电话或他们的电话没有完成状态请记住,我是用脑子写的,所以语法可能有点不对

关于python - flask-sqlalchemy:查询一个表中的记录,在另一个表中没有相关记录(或某个值的记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916011/

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