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