Python SqlAlchemy更新不适用于Sqlite

Python SqlAlchemy更新不适用于Sqlite,python,sqlalchemy,flask,flask-sqlalchemy,Python,Sqlalchemy,Flask,Flask Sqlalchemy,我在这个问题中遵循了(两)个例子: 我发现在Ubuntu Linux上使用sqlite和flask sqlalchemy时不会发生模型更新。最简单的例子不适用于我: class Task: id= db.Column(db.Integer, primary_key=True) name= db.Column(db.String(32), unique=True) desc= db.Column(db.String(255), unique=False) state

我在这个问题中遵循了(两)个例子:

我发现在Ubuntu Linux上使用sqlite和flask sqlalchemy时不会发生模型更新。最简单的例子不适用于我:

class Task:
    id= db.Column(db.Integer, primary_key=True)
    name= db.Column(db.String(32), unique=True)
    desc= db.Column(db.String(255), unique=False)
    state= db.Column(db.Boolean)

    # ...

@app.route("/task/<int:id>/update",methods=["POST"])
def toggle_state(id):
    db.session.query(Task).get(id).update({"state":True})
    log.info("state is now: " + str(Task.query.get(id).state))
    # prints "state is now: False"
类任务:
id=db.Column(db.Integer,主键=True)
name=db.Column(db.String(32),unique=True)
desc=db.Column(db.String(255),unique=False)
state=db.Column(db.Boolean)
# ...
@app.route(“/task//update”,methods=[“POST”])
def切换_状态(id):
db.session.query(Task.get(id).update({“state”:True})
log.info(“现在的状态是:+str(Task.query.get(id.state))
#打印“状态为:False”

第一次使用flask/sqlalchemy,所以我想我错过了一些明显的东西。

所以我尝试了几种不同的方法。以下是不起作用的,以及最终起作用的:

不起作用:

# this will throw an exception, "AttributeError: 'Task' object has no attribute 'update'"
db.session.query(Task).get(id).update({"state":state})
db.session.commit()

# this was the example in the linked SO thread:
# does nothing
db.session.query(Task).filter_by(id=id).update({"state":state})

#this also does nothing
task = Task.query.filter_by(id=id)
task.state = state
db.session.commit()

#not this either
task = Task.query.get(id)
task.state = state
db.session.commit()
工作:

#ok this works:
db.session.query(Task).filter_by(id=id).update({"state":state})
db.session.commit()

#and also this:
task = db.session.query(Task).get(id)
task.state = state
db.session.commit()

这也适用于MySQLFor声明式样式:
session.query(Task).filter_by(id=id).update({“state”:state})