更新SQLAlchemy多行无法执行预定任务

时间:2019-03-06 15:51:30

标签: python postgresql flask sqlalchemy

我有这个模特:

Class Job(db.Model)

__tablename__ = "job"

id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), nullable=False)
city = db.Column(db.String(250), nullable=False)
state = db.Column(db.String(10), nullable=False)
zipCode = db.Column(db.String(10), nullable=False)
latitude = db.Column(db.String(10), nullable=False)
longitude = db.Column(db.String(10), nullable=False)
description = db.Column(db.String(200), nullable=False)
narrative = db.Column(db.String(250), nullable=False)
companyLogo = db.Column(db.String(250), nullable=False)
companyName = db.Column(db.String(250), nullable=False)
companyURL = db.Column(db.String(100), nullable=False)
time_created = db.Column(db.DateTime, nullable=False)
active = db.Column(db.Boolean, nullable=False)

我正在尝试按照以下条件更新早于14天的条目

@classmethod
def deactivate_old_entries(cls)-> "JobModel":
    x_days = date.today() - timedelta(days=14)
    return cls.query.filter(Job.time_created < x_days).\
        update({"active": (False)})

我知道过滤器部分可以正常工作,因为它正确地返回了14天以上的条目,在这种情况下为11行

返回的值是11,我认为行数正确,但是我看不到这11行的活动列中有任何更改。当它们显示为false时它们保持为真

似乎未提交更改

这是一个由芹菜预定工人运行的异步任务。 但是,即使我在POSTMAN的请求中从视图中运行它,也执行相同的操作,这意味着它返回11,但数据库中活动列的值没有变化。

知道我的错误在哪里吗?

1 个答案:

答案 0 :(得分:0)

我必须这样做

def deactivate_old_entries()-> "JobModel":
    nigthy_days = date.today() - timedelta(days=14)
    db.session.query(Job).filter(Job.time_created < nigthy_days).\
        update({"active": (False)})
    db.session.commit()

效果很好。