我正在尝试更新名为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
方法:
- 整个SQL 语句文本,包括参数占位符。
- 包含参数名称及其值的
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}(;