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中模拟enum枚举类型的5种方法分享
Nov 22 Python
python中日期和时间格式化输出的方法小结
Mar 19 Python
Python中逗号的三种作用实例分析
Jun 08 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Python pickle模块实现对象序列化
Nov 22 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
python异常处理之try finally不报错的原因
May 18 Python
python3爬虫中异步协程的用法
Jul 10 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
Python 多线程处理任务实例
Nov 07 Python
python playwright之元素定位示例详解
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
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php自动加载方式集合
2016/04/04 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
scrapy爬虫完整实例
2018/01/25 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
详解Python 函数如何重载?
2019/04/23 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
Python属性和内建属性实例解析
2020/01/14 Python
Python识别html主要文本框过程解析
2020/02/18 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
python如何安装下载后的模块
2020/07/03 Python
Python 在函数上添加包装器
2020/07/28 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
解除财产保全担保书
2014/05/20 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang