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 相关文章推荐
Django ORM框架的定时任务如何使用详解
Oct 19 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
Numpy之random函数使用学习
Jan 29 Python
Python中format()格式输出全解
Apr 12 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
python根据文本生成词云图代码实例
Nov 15 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
django自定义模板标签过程解析
Dec 14 Python
python定义类self用法实例解析
Jan 22 Python
Python守护进程实现过程详解
Feb 10 Python
python zip()函数的使用示例
Sep 23 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
php轻松实现文件上传功能
2016/03/03 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
bootstrap table小案例
2016/10/21 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Python request post上传文件常见要点
2020/11/20 Python
python中uuid模块实例浅析
2020/12/29 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
super()与this()的区别
2016/01/17 面试题
挂职自我鉴定
2014/02/26 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
详解Redis复制原理
2021/06/04 Redis
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫