【问题标题】:Updating SQLAlchemy multiple rows not working from an scheduled task从计划任务更新 SQLAlchemy 多行不起作用
【发布时间】:2019-03-06 15:51:29
【问题描述】:

我有这个模型:

类作业(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 行的活动列没有变化。当它们应该显示为假时,它们仍然为真

看起来更改没有提交

这是一个从 celery 调度工作者运行的异步任务。 但是,即使我在来自 POSTMAN 的请求中从视图中运行,它也会执行相同的操作,这意味着它返回 11,但在数据库中的活动列中没有更改。

知道我的错误在哪里吗?

【问题讨论】:

  • 你承诺了吗?此外,读者是否保持事务打开,具有阻止他们看到更改的隔离级别?

标签: python postgresql flask sqlalchemy


【解决方案1】:

我不得不这样做

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()

而且效果很好。

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多