Python MySQLdb 执行sql语句时的参数传递方式

作者:翔云123456 时间:2024-01-28 08:45:33 

使用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语句时的参数传递方式

最后建议大家多看官方的文档或标准教程,这样更有益学习

来源:https://blog.csdn.net/lanyang123456/article/details/90116442

标签:MySQLdb,sql语句,参数,传递
0
投稿

猜你喜欢

  • 三种Python比较两个时间序列在图形上是否相似的方法分享

    2023-04-26 20:57:12
  • python爬虫豆瓣网的模拟登录实现

    2023-07-08 20:28:08
  • JS实现图片延迟加载并淡入淡出效果的简单方法

    2023-07-02 05:19:14
  • python实现全盘扫描搜索功能的方法

    2022-10-29 14:43:57
  • 运行SQL Server的计算机间移动数据库

    2009-01-20 13:07:00
  • Python实现随机生成任意数量车牌号

    2022-08-04 04:53:17
  • PHP实现的登录,注册及密码修改功能分析

    2023-11-14 21:45:29
  • python中如何使用insert函数

    2023-08-02 17:04:43
  • Python实现数据可视化看如何监控你的爬虫状态【推荐】

    2022-07-15 11:50:43
  • python3使用requests模块爬取页面内容的实战演练

    2022-01-08 18:26:57
  • Vue mockjs编写假数据并请求获取实现流程

    2024-04-28 09:27:22
  • Vue实现类似Spring官网图片滑动效果方法

    2024-04-30 10:29:04
  • javascript window.opener的用法分析

    2024-05-05 09:22:49
  • 合并SQL脚本文件的方法分享

    2024-01-21 10:00:49
  • Python pandas库中的isnull()详解

    2022-06-06 20:58:01
  • python批量添加zabbix Screens的两个脚本分享

    2022-07-21 02:17:28
  • python检查URL是否正常访问的小技巧

    2022-02-23 09:23:56
  • 动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言介绍

    2023-04-24 19:48:44
  • 如何用变量实现群聊和悄悄话?

    2010-05-19 21:33:00
  • Python Series从0开始索引的方法

    2021-07-17 19:20:38
  • asp之家 网络编程 m.aspxhome.com