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*fromorangewhereid=%s"%orange_id cursor=conn.cursor(sql) cursor.execute()
2.传递参数
color="yellow"
sql="select*fromorangewherecolor=%s"
cursor.execute(sql,color)
注意此处的占位符是%s,无论是字符串、数字或者其他类型,都是这个占位符。
另外,%s不能加引号,如'%s',这是错误的写法。
与第一种写法,有什么区别呢?
两者区别是对变量的解析:
第一种写法,使用百分号%,是用Python解释器对%s执行相应的替换。这种方法存在漏洞,有些时候不能正常解析,比如包含某些特殊字符,甚至会造成注入攻击的风险。
第二种,变量是作为execute的参数传入的,由MySQLdb的内置方法把变量解释成合适的内容。
一般情况下,建议使用第二种方法,把变量作为参数传递给execute。
3.使用字典dict类型传递参数
sql="select*fromorangewhere%(color)s,%(weight)s" values={"color":"yellow","weight":30} cursor.execute(sql,values)
这种方式,传递的参数对应关系比较清晰。尤其是参数比较多时,使用字典,可以保证传递参数的顺序正确。
补充知识:python自动化之pymysql库使用变量向SQL语句中动态传递参数(sql注入||传参策略)
使用python3连接Mysql实现自动化增删查改库内数据,由于项目原因很多的sql语句过于复杂,导致sql语句内传递的参数过多而且容易变动,导致很多同学不知从何下手动态的传递参数,有的采用比较笨的方法拼接sql,但是工作量太大,而且复杂的语句拼接时很容易出错且不好维护,所以为大家整理了%s占位符的字典传参的用法
importpymysql db=pymysql.connect(host="119.XX.XX.XX", port=3306, user="XXXXXXXX", passwd="XXXXXXXXXXXXX", db="XXXXXX", charset='utf8') #%s占位符为需要传递的参数,切记不要加''双引号,要不然会报错 sql="SELECTtotalusercount*1.4FROMmm_project_uv_outdoorWHEREpoiid=%sANDcurrenttime=%s" cursor=db.cursor() #以下为传递多个参数的用法 cursor.execute(sql,['B00140N5CS','2019-04-23']) #传递单个参数时cursor.execute(sql,'B00140N5CS') print(cursor.fetchall()) db.close()
运行后就能得到所查询的数据了
最后建议大家多看官方的文档或标准教程,这样更有益学习
以上这篇PythonMySQLdb执行sql语句时的参数传递方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。