为什么即使我将属性标记为已修改后,(Flask-)SQL Alchemy也不会提交我的更改?

时间:2015-10-14 00:11:16

标签: python mysql flask sqlalchemy flask-sqlalchemy

我正在使用Flask-SQLAlchemy并尝试进行简单更新并提交到表中的列。

这是更大的应用程序的一部分,但所有导致我麻烦的代码如下:

from flask import Flask
app = Flask(__name__)

from sqlalchemy.orm.attributes import flag_modified
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

class Schedule(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    next = db.Column(db.DateTime)

    def bump(self, days=7, minutes=0, seconds=0):
        self.next += timedelta(days=7, minutes=0, seconds=0)
        flag_modified(self, 'next')    
    def __init__(self):
        self.next = datetime.now()

def update():
    schedule = db.session.query(models.Schedule).first()
    print(schedule.next)
    schedule.bump()
    db.session.commit()
    print(schedule.next)

当我致电update()时,我看到两个日期按照我的预期打印出来(以一周为单位)。

当我检查数据库next仍然设置为原始日期时 当我打开设置以回显SQL命令时,我只得到以下内容:

2015-10-13 16:52:26,076 INFO sqlalchemy.engine.base.Engine SELECT schedule.id AS schedule_id, schedule.next AS schedule_next 
FROM schedule 
 LIMIT %s
2015-10-13 16:52:26,076 INFO sqlalchemy.engine.base.Engine (1,)

两个日期之间没有打印任何内容(调用commit()时)。我似乎能够毫无困难地在应用程序中提交各种其他东西,但我似乎无法让这一点坚持下去。

我尝试导入flag_modified并明确标记属性脏但仍然没有运气。

我认为可能相关的一件事是在rqworker线程中调用更新函数(使用python-rq)。

我不确定为什么这会阻止数据被保留,但我想不出有关此代码的任何其他特殊内容。

0 个答案:

没有答案