在 MariaDB 中查询时 SQL 语法错误

Error in SQL syntax while querying in MariaDB

我在 mariadb 中有一个名为 Container 的 table,具有三个字段 container_id mt_date年龄

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

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 查询代码好几次,但没有发现语法错误。寻求帮助。

您在 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)
    )