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

 更新时间:2020年03月04日 08:15:17   作者:翔云123456  
这篇文章主要介绍了Python MySQLdb 执行sql语句时的参数传递方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

使用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语句时的参数传递方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python3.6之xlwt如何设置单元格对齐方式

    python3.6之xlwt如何设置单元格对齐方式

    这篇文章主要介绍了python3.6之xlwt如何设置单元格对齐方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • wxPython修改文本框颜色过程解析

    wxPython修改文本框颜色过程解析

    这篇文章主要介绍了wxPython修改文本框颜色过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python使用Pickle模块进行数据保存和读取的讲解

    Python使用Pickle模块进行数据保存和读取的讲解

    今天小编就为大家分享一篇关于Python使用Pickle模块进行数据保存和读取的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 最新Pygame zero最全集合

    最新Pygame zero最全集合

    这篇文章主要介绍了最新Pygame zero最全集合,通过本文学习知道update函数是pygame zero自带的函数,每秒运行60次,当然也可以修改,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 编写python程序的90条建议

    编写python程序的90条建议

    自己写 Python 也有四五年了,一直是用自己的“强迫症”在维持自己代码的质量。都有去看 Google 的 Python 代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学 Python,准备要学习 Python,希望这篇文章对你有用。
    2021-04-04
  • Python脚本破解压缩文件口令实例教程(zipfile)

    Python脚本破解压缩文件口令实例教程(zipfile)

    这篇文章主要给大家介绍了关于Python脚本破解压缩文件口令(zipfile)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • Python数据可视化实现多种图例代码详解

    Python数据可视化实现多种图例代码详解

    这篇文章主要介绍了Python数据可视化实现多种图例代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Flask框架实现的前端RSA加密与后端Python解密功能详解

    Flask框架实现的前端RSA加密与后端Python解密功能详解

    这篇文章主要介绍了Flask框架实现的前端RSA加密与后端Python解密功能,结合实例形式详细分析了flask框架前端使用jsencrypt.js加密与后端Python解密相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • Scrapy的Pipeline之处理CPU密集型或阻塞型操作详解

    Scrapy的Pipeline之处理CPU密集型或阻塞型操作详解

    这篇文章主要介绍了Scrapy的Pipeline之处理CPU密集型或阻塞型操作详解,Twisted框架的reactor适合于处理短的、非阻塞的操作,Twisted提供了线程池来在其他的线程而不是主线程(Twisted的reactor线程)中执行慢的操作,需要的朋友可以参考下
    2023-10-10
  • Python list和str互转的实现示例

    Python list和str互转的实现示例

    这篇文章主要介绍了Python list和str互转的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论