使用JOIN和OR进行SQLAlchemy模型搜索

问题描述 投票:0回答:1

遇到问题从一些连接的表中获得一些过滤结果。希望大家能够在我拉出我留下的小头发之前让我直截了当...我需要运行的查询是这样的:

全部来自通知,其中comm_approval!= New,或Notifications.rel_tas.startdate> =今天

class Taskinfo(db.Model):
    __tablename__ = 'taskinfo'  
    id = db.Column(db.Integer, primary_key=True)
    tasnum = db.Column(db.String(30), unique=False)
    startdate = db.Column(db.TIMESTAMP)
    enddate = db.Column(db.TIMESTAMP)

class Notifications(db.Model):
    __tablename__ = 'notifications'
    id = db.Column(db.Integer, primary_key=True)
    comm_approval = db.Column(db.String(30), unique=False, default='New')
    rel_tas_id = db.Column(db.Integer, db.ForeignKey('taskinfo.id'), nullable=False)
    rel_tas = db.relationship('Taskinfo', lazy='joined', foreign_keys=[rel_tas_id])

我已经走到了这一步,但出于某种原因,这让我得到了你期望从AND获得的结果

upQuery = db.session.query(Notifications) \
.join(Notifications.rel_tas).filter(or_(Notifications.comm_approval != 'New', Taskinfo.startdate >= datetime.utcnow())) \
.paginate(uppage,per_page,error_out=False)

编辑有关整个过滤器的一些事情让我觉得错误。我刚刚意识到,在prod系统中,这个查询将返回100个数千行。有点像一个网页。我将在周一与客户核实。谢谢您的帮助。

python flask sqlalchemy
1个回答
0
投票

你试过这个吗?

upQuery = db.session.query(Notifications) \
.join(Notifications.rel_tas).filter((Notifications.comm_approval != 'New') | (Taskinfo.startdate >= datetime.utcnow())) \
.paginate(uppage,per_page,error_out=False)
© www.soinside.com 2019 - 2024. All rights reserved.