我正在使用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)。
我不确定为什么这会阻止数据被保留,但我想不出有关此代码的任何其他特殊内容。