Python SQLite3 多字符串操作
Python SQLite3 multiple string manipulation
使用SQLite3,如何在一个请求中使用多个变量?使用一个是可行的,但是一旦你添加第二个,它就会给你下面的语法错误。我已尝试对此进行研究,但在相同情况下找不到任何 documentation/other 问题。
代码:
self.db.execute("INSERT INTO complements (:record) VALUES (:field)", {"record": record, "field": field})
错误:
|Traceback (most recent call last):
File "(path)", line 22, in <module>
db.add("Adjective", "adjective")
File "(path)", line 17, in add
self.db.execute("INSERT INTO complements (:record) VALUES (:field)", {"record": record, "field": field})
sqlite3.OperationalError: near ":record": syntax error
列名称(以及其他标识符,如 table 名称)无法参数化,这就是您收到语法错误的原因。只能参数化“值”(要插入的数据)。要解决此问题,请自行格式化查询,例如使用格式字符串:
record, field = ...
self.db.execute(f"INSERT INTO complements ({record}) VALUES (:field)", {"field": field})
如果 record
是 user-provided,您必须注意防止 SQL 注入,例如通过检查它是否是一个有效的列名:record in ["some", "column", "names"]
;然而,在查询中参数化标识符并不常见,所以这感觉就像 XY-Problem.
使用SQLite3,如何在一个请求中使用多个变量?使用一个是可行的,但是一旦你添加第二个,它就会给你下面的语法错误。我已尝试对此进行研究,但在相同情况下找不到任何 documentation/other 问题。
代码:
self.db.execute("INSERT INTO complements (:record) VALUES (:field)", {"record": record, "field": field})
错误:
|Traceback (most recent call last):
File "(path)", line 22, in <module>
db.add("Adjective", "adjective")
File "(path)", line 17, in add
self.db.execute("INSERT INTO complements (:record) VALUES (:field)", {"record": record, "field": field})
sqlite3.OperationalError: near ":record": syntax error
列名称(以及其他标识符,如 table 名称)无法参数化,这就是您收到语法错误的原因。只能参数化“值”(要插入的数据)。要解决此问题,请自行格式化查询,例如使用格式字符串:
record, field = ...
self.db.execute(f"INSERT INTO complements ({record}) VALUES (:field)", {"field": field})
如果 record
是 user-provided,您必须注意防止 SQL 注入,例如通过检查它是否是一个有效的列名:record in ["some", "column", "names"]
;然而,在查询中参数化标识符并不常见,所以这感觉就像 XY-Problem.