在MariaDB中查询时SQL语法出错

时间:2015-12-19 04:47:02

标签: python mariadb mariasql

我在 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查询代码,但无法找到语法错​​误。寻求帮助。

1 个答案:

答案 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)
    )