记录 splite3 库的一个坑(表名和字段定义不能用占位符?)
Posted Xavier Jiezou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录 splite3 库的一个坑(表名和字段定义不能用占位符?)相关的知识,希望对你有一定的参考价值。
项目场景
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
以上是关于记录 splite3 库的一个坑(表名和字段定义不能用占位符?)的主要内容,如果未能解决你的问题,请参考以下文章