我正在编写一个简单的应用程序来帮助人们打电话给选民。我不希望我的志愿者不止一次地骚扰任何选民。如何获得尚未被召集的选民名单?我正在使用带有 flask-sqlalchemy 的烧瓶。
选民模型:
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 将包含诸如已完成、忙碌、错误号码等值。
我想获得一份所有有资格被召集的选民的名单,以便我可以挑选一个为志愿者服务。(即 call.status_code != 完成等。或者没有相关的通话记录)
如果要在原始 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 中弄清楚。有什么见解吗?