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.