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在发送之前自己进行查询。
我正在尝试使用以下代码在我的 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在发送之前自己进行查询。