SQLAlchemy .execute() 语法用于传入变量



我正在尝试更新名为dhl_team 的表玩家表的列,以 ID 8476923为例的特定行。如果我运行:

db.execute("UPDATE players SET dhl_team = 10 WHERE id = 8476923");

它如我所期望的那样更新表。

我宁愿做的是从我设置的变量中传入更新的信息。例如

x = 1
k = 8476923
db.execute("UPDATE players SET dhl_team = 10 WHERE id = 8476923");

我跌倒了,它应该是这样的:

x = 1
k = 8476923
db.execute("UPDATE players SET dhl_team = :x", {"x": x}) WHERE id = 8476923"); 

但这会返回一个错误;

db.execute("UPDATE players SET dhl_team = :x", {"x": x}) WHERE id = 8476923");
^

语法错误:语法无效

有人可以告诉我应该怎么做吗?

您需要将两个参数传递给.execute方法:

  1. 整个SQL 语句文本,包括参数占位符。
  2. 包含参数名称及其值的dict

所以在你的情况下,你会看

import sqlalchemy as sa
# ...
db = sa.create_engine(connection_uri)
sql = sa.text("UPDATE players SET dhl_team = :x WHERE id = 8476923")
params = {"x": 1}
with db.begin() as cnxn:
cnxn.execute(sql, params)
print("Update completed.")

这是我使用的代码,它也有效。

x = 1

k = 8476923

db.execute("UPDATE player SET dhl_team = :x WHERE id = :k", {"x": x, "k": k}(;

最新更新