我正在尝试使用此代码在我的sqlite3表中使用列表作为标题:
import sqlite3 as lite
headers = ['Id', 'Name', 'Price']
con = lite.connect('test.sqlite3')
with con:
cur = con.cursor()
cur.execute("CREATE TABLE Cars(? INT, ? TEXT, ? INT)", tuple(headers))
但是我收到了这个错误:
OperationalError: near "?": syntax error
有关如何使其发挥作用的任何想法?
答案 0 :(得分:0)
在Python的SQL查询中,只有在值的情况下才允许占位符(例如?
) - 实际数据。对于 meta 数据,例如表和字段的名称,您很遗憾需要字符串替换。
所以在这种情况下
qry = 'CREATE TABLE Cars({} INT, {} TEXT, {} INT)'.format(*headers)
cursor.execute(qry)
当然,如果headers
来自不受信任的来源,确实会让您面临SQL注入风险 - 无法安全接受<来自不受信任来源的strong> meta 数据,您必须先自行清除/验证查询。