QT5 的QSqlDatabase 防止SQL注入

本文介绍了如何在Python中使用PyQt5的QSqlQuery模块避免SQL注入问题,通过prepare()和bindValue()方法正确处理参数,确保代码安全。重点讲解了addBindValue()和bindValue()的用法以及它们在执行SQL查询时的区别。

用拼接字符串方式构造SQL语句比较容易犯sql注入问题。

常见的防范方式是以参数传入的方式处理,(把参数通过数据库提供的接口传入数据库,在数据库里面处理,而不是在数据库外面拼接SQL语句)

python 中一般是在游标执行execute时传递参数

uid=123
pwd='bb987#$!~EE' 
args = (uid, pwd)
cur.execute('select * from user_table where uid = %s and pwd = %s', args )

注意:

对于传入的字符串类型的参数,在构造sql语句的模板上不需要加引号,mysql会自动转义及加引号的。

但对于string.format(参数值,参数值) 和 string % (参数值,参数值) 方式先把sql生成好再直接执行的方式,是需要手动加引号的。

uid=100
pwd='976$#@387'
cur.execute(“select * from user_table where uid = %s and pwd = %s”, (uid,pwd) )

# 上面这句pwd位置不需要加引号,sql模板和值之间是用逗号【分隔】。
# 下面这句pwd位置需要加引号,   sql模板和值之间是用百分号【连接】。

cur.execute(“select * from user_table where uid = %s and pwd = '%s'” % (uid,pwd) )

但QT5的QsqlQuery的exec函数不支持这种方式。提示:too many arguments

建议使用QSqlQuery.prepare  官方文档:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值