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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
python中map()函数的使用方法示例
Sep 29 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
详解python中的线程与线程池
May 10 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
实用函数10
2007/11/08 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
使用JavaScript 编写简单计算器
2014/11/24 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
Python 开发Activex组件方法
2009/11/08 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
夜大自我鉴定
2013/10/31 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
家长会主持词
2014/03/26 职场文书
中秋节主持词
2014/04/02 职场文书
导师工作推荐信范文
2014/05/17 职场文书
消防安全标语
2014/06/07 职场文书
质量月口号
2014/06/20 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
详解Redis主从复制实践
2021/05/19 Redis