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中while true的使用
Oct 13 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
将python图片转为二进制文本的实例
Jan 24 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
python实现维吉尼亚算法
Mar 20 Python
使用Python的turtle模块画国旗
Sep 24 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 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
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
js实现拖拽功能
2017/03/01 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
jQuery实现日历效果
2020/09/11 jQuery
Python描述器descriptor详解
2015/02/03 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python编程求质数实例代码
2018/01/31 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
python设置中文界面实例方法
2020/10/27 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
局域网标准
2016/09/10 面试题
小学一年级数学教学计划
2015/01/20 职场文书
小学班主任自我评价
2015/03/11 职场文书
飞屋环游记观后感
2015/06/08 职场文书
Python中with上下文管理协议的作用及用法
2022/03/18 Python