python sqlite3 CREATE TABLE 使用列表作为标题转义?

python sqlite3 CREATE TABLE escape using list as headings?

我正在尝试使用以下代码在我的 sqlite3 table 中使用列表作为标题:

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 

关于如何让它工作的任何想法?

在来自 Python 的 SQL 查询中,占位符(例如 ?)仅在 values 为 -- 实际数据的位置允许.对于 meta数据,如表名和字段名,不幸的是你需要字符串替换。

所以在这种情况下

qry = 'CREATE TABLE Cars({} INT, {} TEXT, {} INT)'.format(*headers)
cursor.execute(qry)

当然,如果 headers 来自不受信任的来源,这 确实 会让您面临 SQL 注入的风险——无法 安全地接受来自不受信任来源的meta数据,您必须scrub/verify在发送之前自己进行查询。