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 import用法以及与from...import的区别
May 28 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
Python 函数list&read&seek详解
Aug 28 Python
Python字符串的修改方法实例
Dec 19 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 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
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
checkbox使用示例
2013/08/23 Javascript
jsonp原理及使用
2013/10/28 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
Swiper实现轮播图效果
2017/07/03 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
浅析Python中的多条件排序实现
2016/06/07 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
Python 切分数组实例解析
2019/11/07 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
python怎么删除缓存文件
2020/07/19 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
英国家用电器购物网站:Hughes
2018/02/23 全球购物
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
小学中秋节活动方案
2014/02/06 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
技校毕业生自荐信
2014/06/03 职场文书
求职教师自荐书
2014/06/19 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android