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使用sorted排序的方法小结
Jul 28 Python
Python从零开始创建区块链
Mar 06 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Python3中关于cookie的创建与保存
Oct 21 Python
基于python生成器封装的协程类
Mar 20 Python
详解python之heapq模块及排序操作
Apr 04 Python
详解如何管理多个Python版本和虚拟环境
May 10 Python
python Django中models进行模糊查询的示例
Jul 18 Python
django实现日志按日期分割
May 21 Python
keras实现多种分类网络的方式
Jun 11 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
理解JavaScript的prototype属性
2012/02/11 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
javascript实现简单留言板案例
2021/02/09 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python实现的重启关机程序实例
2014/08/21 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
战友聚会邀请函
2014/01/18 职场文书
篮球比赛策划方案
2014/06/05 职场文书
2014年教师节寄语
2014/08/11 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript