社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

将python中的变量传入SQL查询

laddie_03 • 6 年前 • 1400 次点击  

当我运行下面的SQL查询时,我得到了错误 打印(db.execute(“select*from(?);“),(表名)) sqlite3.operationalerror:near“?”:语法错误

db = sqlite3.Connection(":memory:")
db.execute("CREATE TABLE Students(name);")
tableName = "Students"
var1 = "Jon"
var2 = "Steve"
var3 = "Chuckie"
db.execute("INSERT INTO Students VALUES (?), (?), (?)", (var1, var2, var3))
print(db.execute("SELECT * FROM (?);"), (tableName))

将参数传入SQL查询的正确方法是什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/36310
 
1400 次点击  
文章 [ 2 ]  |  最新文章 6 年前
Vaibhav Sharma
Reply   •   1 楼
Vaibhav Sharma    6 年前

传递元组中的值,

query = ("INSERT INTO  billed_items(item_name,billed_qty,price,item_bill_series) VALUES(?,?,?,?)")
c.execute(query,((name),(no),(price),(series))
conn.commit()
Mureinik
Reply   •   2 楼
Mureinik    6 年前

不能在SQL中动态绑定对象名,只能绑定值。对于这种行为,您必须使用字符串操作:

queryTemplate = 'SELECT * FROM %s'
tableName = 'Students'
query = queryTemplate % tableName

print(query)


为了解决评论中的问题——是的,这种技术确实更容易受到SQL注入攻击。在这种情况下,防止SQL注入的常见做法是使用允许表的白名单。

allowedTables = ['students', 'teachers']
if tableName not in allowedTables:
    raise ValueError('Wrong table')