0

我在mariadb中有一个名为Container的表,其中包含三个字段container_idmt_dateage

我想要做的是,每次加载数据库时,更新/设置与特定 container_id 对应的年龄字段的新值。我将年龄和相应的 container_id 分别保存在 python 字典中作为值和键。比我遍历字典并尝试像这样更新年龄-

for i in list(age_dict):
    frappe.db.sql("update Container set age = age_dict[i] where container_id = i")

在这里,frappe.db.sql()是我的框架的 db 连接命令。

我不断收到此错误消息-

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[i] where container_id = i' at line 1")

我已经检查了我的 sql 查询代码几次,但找不到语法错误。寻求帮助。

4

1 回答 1

3

您在 SQL 语句中的 python 代码永远不会被解释。数据库实际上是在尝试执行update Container set age = age_dict[i] where container_id = i确实是无效语法的命令。您应该使用参数化,这将有助于防止 SQL 注入并轻松格式化 SQL 命令。语法几乎与字符串插值相同,但您将值(作为元组)作为第二个参数传递给frappe.db.sql().

for key in list(age_dict):
    frappe.db.sql(
        "update Container set age = %s where container_id = %s",
        (age_dict[key], key)
    )
于 2015-12-19T05:00:07.367 回答