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中assert用法实例分析
Apr 30 Python
Python断言assert的用法代码解析
Feb 03 Python
儿童编程python入门
May 08 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
python属于哪种语言
Aug 16 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
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
Python实现堆排序的方法详解
2016/05/03 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
解决python 输出是省略号的问题
2018/04/19 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
财务会计专业个人求职信范本
2014/01/08 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
国旗下演讲稿
2014/05/08 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
防震减灾主题班会
2015/08/14 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
HTML中的表格元素介绍
2022/02/28 HTML / CSS
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python