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中编写并发程序
Feb 27 Python
Python类的动态修改的实例方法
Mar 24 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
Python3.6简单反射操作示例
Jun 14 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
Python操作SQLite数据库过程解析
Sep 02 Python
Python如何访问字符串中的值
Feb 09 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Python 串口通信的实现
Sep 29 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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产生随机字符串函数
2006/12/06 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中的元类编程入门指引
2015/04/15 Python
pycharm安装图文教程
2017/05/02 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
python实现AES加密解密
2019/03/28 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python 求定积分和不定积分示例
2019/11/20 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
keras slice layer 层实现方式
2020/06/11 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
详解python的super()的作用和原理
2020/10/29 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
团日活动总结书
2014/05/08 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
年终晚会活动方案
2014/08/21 职场文书
庆国庆活动总结
2014/08/28 职场文书
车贷收入证明范本
2014/09/14 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
紧急迫降观后感
2015/06/15 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js