3

私は、人々が有権者に電話をかけるのに役立つ簡単なアプリを書いています。私のボランティアが有権者を何度も悩ませてほしくありません。まだ召集されていない有権者のリストを取得するにはどうすればよいですか? 私はフラスコをフラスコ-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 には、completed、busy、wrong_number などの値が含まれます。

ボランティアに奉仕する投票者を 1 人選ぶことができるように、電話を受ける資格のあるすべての有権者のリストを取得したいと考えています。(つまり、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でそれを理解できません。洞察はありますか?

4

1 に答える 1