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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python线程指南详细介绍
Jan 05 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JavaScript日历实现代码
2010/09/12 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
django用户登录验证的完整示例代码
2019/07/21 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
财务会计自荐信范文
2014/02/21 职场文书
环保标语大全
2014/06/12 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
公务员个人年终总结
2015/02/12 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
运动会宣传稿50字
2015/07/23 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
Nginx快速入门教程
2021/03/31 Servers