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中使用不同编码读写txt文件详解
May 28 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
python中的&&及||的实现示例
Aug 07 Python
python的命名规则知识点总结
Oct 04 Python
Django框架安装方法图文详解
Nov 04 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
Python中的流程控制详解
Feb 18 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 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执行速度全攻略(下)
2006/10/09 PHP
PHP 数组实例说明
2008/08/18 PHP
探讨如何把session存入数据库
2013/06/07 PHP
Yii学习总结之安装配置
2015/02/22 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
php实现文件上传基本验证
2020/03/04 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python实现高斯投影正反算方式
2020/01/17 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
触摸春天教学反思
2014/02/03 职场文书
外贸业务员求职信
2014/06/16 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
网络舆情信息简报
2015/07/21 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python