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

2020-09-24 0 166

使用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 MySQLdb 执行sql语句时的参数传递方式 http://www.ox520.com/24753.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务