系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > Mysql > 详细页面

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

时间:2020-03-04来源:电脑系统城作者:电脑系统城

使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法。

1.不传递参数


 
  1. conn =MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb")
  2.  
  3. orange_id = 98
  4. sql = "select * from orange where id=%s" % orange_id
  5.  
  6. cursor = conn.cursor(sql)
  7. 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类型传递参数


 
  1. sql = "select * from orange where %(color)s, %(weight)s"
  2. values = {"color": "yellow", "weight": 30}
  3. cursor.execute(sql, values)

这种方式,传递的参数对应关系比较清晰。尤其是参数比较多时,使用字典,可以保证传递参数的顺序正确。

补充知识:python自动化之pymysql库使用变量向SQL语句中动态传递参数(sql注入 || 传参策略)

使用python 3连接Mysql实现自动化增删查改库内数据,由于项目原因很多的sql语句过于复杂,导致sql语句内传递的参数过多而且容易变动,导致很多同学不知从何下手动态的传递参数,有的采用比较笨的方法拼接sql,但是工作量太大,而且复杂的语句拼接时很容易出错且不好维护,所以为大家整理了%s占位符的字典传参的用法


 
  1. import pymysql
  2.  
  3. db = pymysql.connect(host="119.XX.XX.XX",
  4. port=3306,
  5. user="XXXXXXXX",
  6. passwd="XXXXXXXXXXXXX",
  7. db="XXXXXX",
  8. charset='utf8')
  9.  
  10. # %s 占位符为需要传递的参数,切记不要加''双引号,要不然会报错
  11. sql = "SELECT totalusercount * 1.4 FROM mm_project_uv_outdoor WHERE poiid = %s AND currenttime = %s"
  12.  
  13. cursor = db.cursor()
  14. # 以下为传递多个参数的用法
  15. cursor.execute(sql,['B00140N5CS','2019-04-23'])
  16. # 传递单个参数时 cursor.execute(sql,'B00140N5CS')
  17. print(cursor.fetchall())
  18. db.close()

运行后就能得到所查询的数据了

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

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

以上这篇Python MySQLdb 执行sql语句时的参数传递方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载