使用list作为标题的python sqlite3 CREATE TABLE转义?

时间:2015-03-11 03:28:43

标签: python sqlite escaping

我正在尝试使用此代码在我的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 

有关如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:0)

在Python的SQL查询中,只有在的情况下才允许占位符(例如?) - 实际数据。对于 meta 数据,例如表和字段的名称,您很遗憾需要字符串替换。

所以在这种情况下

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

当然,如果headers来自不受信任的来源,确实会让您面临SQL注入风险 - 无法安全接受<来自不受信任来源的strong> meta 数据,您必须先自行清除/验证查询。