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使用reportlab画图示例(含中文汉字)
Dec 03 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
Python实现豆瓣图片下载的方法
May 25 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python获取txt文件词向量过程详解
Jul 05 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
详解torch.Tensor的4种乘法
Sep 03 Python
Python中的 No Module named ***问题及解决
Jul 23 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
smarty的保留变量问题
2008/10/23 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
python循环监控远程端口的方法
2015/03/14 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python如何实现数据的线性拟合
2019/07/19 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
如何基于python实现脚本加密
2019/12/28 Python
Python实现动态循环输出文字功能
2020/05/07 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
运动会稿件50字
2014/02/17 职场文书
专项资金申请报告
2015/05/15 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript
讨论nginx location 顺序问题
2022/05/30 Servers