项目场景
Python 内置 sqlite3 模块的官方文档推荐我们向表中插入记录时使用 ?
充当占位符,然后将数据通过参数传递。而不推荐使用 Python 的字符串拼接操作,说是有 SQL 注入风险。于是我这里创建表的时候也想用占位符这种方式:
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
sql = 'create table ? (?)'
table_name = 'student'
arg = 'id integer'
cursor.execute(sql, (table_name, arg))
conn.commit()
cursor.close()
conn.close()
问题描述
但执行上述代码报错:
sqlite3.OperationalError: near "?": syntax error
原因分析
表名称和字段定义不能使用 ?
充当占位符。
既然表名称和字段定义不支持使用 ?
充当占位符,那就不用了吧,改回 Python 的字符串拼接操作。
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
table_name = 'student'
arg = 'id integer'
sql = f'create table {table_name} ({arg})'
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()
引用参考
Inserting a table name into a query gives sqlite3.OperationalError: near “?”: syntax error