【问题标题】:SQLAlchemy update neither works nor raises errorsSQLAlchemy 更新既不工作也不引发错误
【发布时间】:2016-08-29 03:47:23
【问题描述】:

我想更新user 表的email 列,其中id == 3。下面的代码不会更新任何行,甚至不会引发任何错误。问题可能出在哪里?

from sqlalchemy import update
@app.route('/testupdate/')
def testupdate():
    stmt = update(user).where(user.id==3).values(email='a@b')
    db.session.commit()
    return 'done'

【问题讨论】:

  • 试试这个 - session.query(User)。 filter(User.id == 3).update({"email": "a@b"})
  • 收到此错误:AttributeError: 'NullSession' object has no attribute 'query'

标签: python sqlalchemy flask-sqlalchemy


【解决方案1】:

问题是没有向数据库发出 SQL。

    stmt = update(user).where(user.id==3).values(email='a@b')

实际上并不执行语句,它只是创建它。要实际执行它,您必须将其传递给

    db.session.execute(stmt)

然后提交。您也可以只使用会话的Query API:

    db.session.query(user).\
        filter_by(id=3).\
        update({user.email: 'a@b'},
               synchronize_session='evaluate')

请注意,根据您在会话中是否有受影响的实例以及稍后将使用它们,您可以选择根本不与False 同步。

【讨论】:

  • 您 100% 确定您的数据库中有一个 ID 为 3user?还可以考虑在您的配置中将SQLALCHEMY_ECHO 设置为True,并检查SQL 是否实际发送到数据库,即您的代码是否运行。
  • 是的,数据库中有一个 ID 为 3 的用户表,并且 SQLALCHEMY_ECHO 已设置为 True
  • 你看到UPDATE被执行(后面跟着COMMIT)?除此之外,您的代码没有任何问题(原始代码中缺少 execute() 除外)。如果您正在观察UPDATE,则错误在其他地方(例如错误的数据库......)。或许您应该尝试写一个minimal, complete and verifiable example,目前还不是问题所在。在写作时,您甚至可能会发现问题。
  • 我使用了这个,它更新了电子邮件列,但在所有行中 db.session.execute(update(puser, values={puser.email: "za@bcdef"})) 和 'db.session.commit()' 如何更新 id=3 的位置?
  • db.session.execute(update(puser, values={puser.email: "za@bcdef"}).where(puser.id == 3)) 或任何以前的方法。
猜你喜欢
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 2017-04-16
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多