Python MySQLdb 执行sql语句时的参数传递方式


Posted in Python onMarch 04, 2020

使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法。

1.不传递参数

conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb")

orange_id = 98
sql = "select * from orange where id=%s" % orange_id

cursor = conn.cursor(sql)
cursor.execute()

2.传递参数

color = "yellow"
sql = "select * from orange where color = %s"

cursor.execute(sql, color)

注意此处的占位符是%s,无论是字符串、数字或者其他类型,都是这个占位符。

另外, %s不能加引号,如'%s', 这是错误的写法。

与第一种写法,有什么区别呢?

两者区别是对变量的解析:

第一种写法,使用百分号%, 是用Python解释器对%s执行相应的替换。这种方法存在漏洞,有些时候不能正常解析,比如包含某些特殊字符,甚至会造成注入攻击的风险。

第二种,变量是作为execute的参数传入的,由MySQLdb的内置方法把变量解释成合适的内容。

一般情况下,建议使用第二种方法,把变量作为参数传递给execute。

3.使用字典dict类型传递参数

sql = "select * from orange where %(color)s, %(weight)s"
values = {"color": "yellow", "weight": 30}
cursor.execute(sql, values)

这种方式,传递的参数对应关系比较清晰。尤其是参数比较多时,使用字典,可以保证传递参数的顺序正确。

补充知识:python自动化之pymysql库使用变量向SQL语句中动态传递参数(sql注入 || 传参策略)

使用python 3连接Mysql实现自动化增删查改库内数据,由于项目原因很多的sql语句过于复杂,导致sql语句内传递的参数过多而且容易变动,导致很多同学不知从何下手动态的传递参数,有的采用比较笨的方法拼接sql,但是工作量太大,而且复杂的语句拼接时很容易出错且不好维护,所以为大家整理了%s占位符的字典传参的用法

import pymysql
 
db = pymysql.connect(host="119.XX.XX.XX",
            port=3306,
            user="XXXXXXXX",
            passwd="XXXXXXXXXXXXX",
            db="XXXXXX",
            charset='utf8')
 
# %s 占位符为需要传递的参数,切记不要加''双引号,要不然会报错
sql = "SELECT totalusercount * 1.4 FROM mm_project_uv_outdoor WHERE poiid = %s AND currenttime = %s"
 
cursor = db.cursor()
# 以下为传递多个参数的用法
cursor.execute(sql,['B00140N5CS','2019-04-23'])
# 传递单个参数时 cursor.execute(sql,'B00140N5CS')
print(cursor.fetchall())
db.close()

运行后就能得到所查询的数据了

Python MySQLdb 执行sql语句时的参数传递方式

最后建议大家多看官方的文档或标准教程,这样更有益学习

以上这篇Python MySQLdb 执行sql语句时的参数传递方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
收集的几个Python小技巧分享
Nov 22 Python
用Python编写生成树状结构的文件目录的脚本的教程
May 04 Python
Flask框架配置与调试操作示例
Jul 23 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
Python3解释器知识点总结
Feb 19 Python
Python 分享10个PyCharm技巧
Jul 13 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 #Python
利用Python脚本批量生成SQL语句
Mar 04 #Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 #Python
Python正则表达式学习小例子
Mar 03 #Python
python正则表达式实例代码
Mar 03 #Python
python 实现在无序数组中找到中位数方法
Mar 03 #Python
python的列表List求均值和中位数实例
Mar 03 #Python
You might like
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
php flv视频时间获取函数
2010/06/29 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
php 删除cookie方法详解
2014/12/01 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
js获取ip和地区
2017/03/10 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
Python学习小技巧之列表项的拼接
2017/05/20 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
python如何建立全零数组
2020/07/19 Python
Python中pass的作用与使用教程
2020/11/13 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
师德师风建设方案
2014/05/08 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
英语读书笔记
2015/07/02 职场文书
婚礼父母致辞
2015/07/28 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript