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获取豆瓣电影简介代码分享
Jan 16 Python
利用Python演示数型数据结构的教程
Apr 03 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python线程之定位与销毁的实现
Feb 17 Python
python实现简单加密解密机制
Mar 19 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
对Django url的几种使用方式详解
Aug 06 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Python发送手机动态验证码代码实例
Feb 28 Python
python tqdm实现进度条的示例代码
Nov 10 Python
Anaconda的安装与虚拟环境建立
Nov 18 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
Vuex简单入门
2017/04/19 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python合并多个装饰器小技巧
2015/04/28 Python
python计算auc指标实例
2017/07/13 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
工商管理本科毕业生求职信范文
2013/10/05 职场文书
文秘人员工作职责
2014/01/31 职场文书
学校元旦晚会方案
2014/02/19 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
大学生评语大全
2014/04/18 职场文书
机关党员公开承诺书
2014/08/30 职场文书
婚内分居协议书范文
2014/11/26 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL