Python连接MySQL数据库执行sql语句时的参数问题
来源:互联网 发布:淘宝口红代购知乎 编辑:程序博客网 时间:2024/06/01 10:40
由于工作需要,今天写了一个Python小脚本,其中需要连接MySQL数据库,在执行sql命令时需要传递参数,结果出问题了。在网上查了一下,发现有以下几种方式传递参数:
一.直接把sql查询语句完整写入字符串
1 try:2 connection = MySQLdb.connect(user="secsel",passwd="secsel@55",host="192.168.138.55",db="anbench")3 except:4 print "Could not connect to MySQL server."5 exit( 0 )6 7 cursor = connection.cursor()8 cursor.execute( "SELECT a.id,a.md5,CONCAT(b.`from_name`,'/',b.`suffix`,'/',a.`md5`) FROM apk_sec a,apk_from b WHERE a.`apk_from_id`=b.`id` AND a.md5 = %s", apk_md5)
二.使用参数替代
city = 'beijing'cur.execute(“SELECT * FROM %s WHERE city = %s”, city)
#注意此处的占位符统统是%s字符串类型,不再区分字符串,数字或者其他类型。另外%s不能加引号,如”%s”这是错误的写法。我就是加引号出错了。
变量替代的时候还有一种写法:
cur.execute(“SELECT * FROM %s WHERE city = %s” %city)
前面代码使用了逗号,这里使用了百分号%。两者区别在于变量的解释方式。使用逗号,变量是作为execute的参数传入的,由MySQLdb的内置方法把变量解释成合适的内容。使用百分号%则是用Python编译器对%s执行相应的替代,这种方法是有漏洞的,有些时候(比如包含某些特殊字符的时候)不能正常解析,甚至会有注入漏洞。一般情况下都要把变量作为execute的参数传入。
3.使用字典dict类型传递变量
1 sql = “INSERT INTO user VALUES(%(username)s, %(password)s, %(email)s)”2 3 value = {“username”:zhangsan,4 5 “password”:123456,6 7 “email”:123456@ouvps.com}8 9 cur.execute(sql, value)
上面这种方法适合字段比较多的时候,变量顺序不会错。
附上我写的脚本代码相关部分:
1 def get_apkpath(apk_md5): 2 try: 3 connection = MySQLdb.connect(user="***",passwd="***",host="192.168.***.***",db="***") 4 except: 5 print "Could not connect to MySQL server." 6 exit( 0 ) 7 8 cursor = connection.cursor() 9 cursor.execute( "SELECT a.id,a.md5,CONCAT(b.`from_name`,'/',b.`suffix`,'/',a.`md5`) FROM apk_sec a,apk_from b WHERE a.`apk_from_id`=b.`id` AND a.md5 = %s", apk_md5) #注意不要加引号10 print "Rows selected:", cursor.rowcount11 12 for row in cursor.fetchall():13 print "note : ", row[0], row[1], row[2] 14 cursor.close()15 return row[2]
阅读全文
0 0
- Python连接MySQL数据库执行sql语句时的参数问题
- Python小脚本,其中需要连接MySQL数据库,在执行sql命令时需要传递参数
- j2ee中连接sqlserver时执行sql语句的问题
- 关于Python操作Mysql数据库时SQL语句的格式问题(mysql语句中的双引号问题)
- java连接SQL数据库,执行SQL语句
- 使用C#对MySQL数据库执行存在中文的SQL语句,不返回值的问题
- sql语句,exec执行 拼接的字符串 输出参数 问题
- C#执行Oracle的Sql语句 参数顺序问题
- loadrunner连接MySQL执行SQL语句
- Mysql数据库实时查看执行的sql语句
- SQL数据库参数连接语句,转义
- java中连接数据库操作的语句,获得执行sql语句对数据库进行操作
- MySQL数据库之PHP执行SQL语句
- python 连接数据库执行sql 查询
- jdbc连接mysql数据库执行sql语句ResultSet结果集一直为空
- C#连接access数据库sql语句出现问题的解决方法
- Python连接MySQL数据库locahost无法连接的问题
- Access数据库操作,连接数据库、执行SQL语句等
- tar命令常用参数速记、详解-随笔
- 第十二课、 C循环
- Vision_数据结构_拓扑排序
- Android EasyRTMP 介绍
- java学习第24天,学习String字面量
- Python连接MySQL数据库执行sql语句时的参数问题
- 应试C++
- Android关于触摸事件跟点击事件两个方法的关系
- 数据库中触发器和索引的使用
- Java:如何用链表实现队列
- erlang shell 命令中文使用说明
- HTML(五) 使用img标签
- Air800(GPRS+GPS模块)连接OneNet平台
- LeetCode