python 包含破折号的 sqlite 命名参数

python sqlite named parameter containing dash

我正在尝试使用 python 中的命名参数(使用 sqlite3 模块)将记录插入到 sqlite 数据库中。 我要插入的值在字典中,但字典键可能包含破折号,例如 {'request-id': 100, 'year': '2015'}。 我正在尝试执行以下操作:

import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS requests (request_id text, year text)''')
query = '''INSERT INTO requests (request_id, year) VALUES (:request-id, :year)'''
cursor.execute(query, {'request-id': 100, 'year': '2015'})
conn.commit()
conn.close()

我在插入语句期间遇到此错误:

sqlite3.OperationalError: no such column: id

破折号似乎没有被广泛接受为命名参数。

对此有很多解决方法,比如创建一个新字典,其中键中的破折号被下划线替换,但我想知道我是否可以使用一些转义技术或其他方法来避免这种情况。

感谢您的帮助

SQL 参数名称没有引号或转义机制;您必须使用与不带引号的标识符相同的规则。

documentation for sqlite3_bind_* 声明参数名称必须由字母数字字符组成,并且没有提及转义它们的方法。

您的查询可能被解析为 :request - id,即 :request 减去 id,并且由于没有这样的列 id,SQLite 会抛出错误。

(此外,正如 Prera​​k Sola 指出的那样,您使用 date 列创建了 table,但尝试插入到不存在的 year 列。)