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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
Python中str.join()简单用法示例
Mar 20 Python
python实现月食效果实例代码
Jun 18 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 Python
Python  lambda匿名函数和三元运算符
Apr 19 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
Protoss兵种对照表
2020/03/14 星际争霸
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
JS对象与json字符串格式转换实例
2014/10/28 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
Python中获取网页状态码的两个方法
2014/11/03 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python标识符命名规范原理解析
2020/01/10 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
求职简历推荐信范文
2013/12/02 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
公司离职证明样本
2014/09/13 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
教师学期末个人总结
2015/02/13 职场文书
中学社团活动总结
2015/05/07 职场文书
致运动员的广播稿
2015/08/19 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers