您当前的位置: 首页 > 

Xavier Jiezou

暂无认证

  • 1浏览

    0关注

    394博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

记录 splite3 库的一个坑(表名和字段定义不能用占位符?)

Xavier Jiezou 发布时间:2022-04-21 15:58:07 ,浏览量:1

项目场景

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

关注
打赏
1661408149
查看更多评论
立即登录/注册

微信扫码登录

0.0391s