我在 mariadb 中有一个名为容器的表,其中有三个字段 container_id , mt_date 和年龄即可。
我想要做的是,每次加载db时,更新/设置与特定container_id对应的age字段的新值。我已将age和相应的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查询代码,但无法找到语法错误。寻求帮助。
答案 0 :(得分: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)
)