由于工作需要,今天写了一个Python小脚本,其中需要连接MySQL数据库,在执行sql命令时需要传递参数,结果出问题了。在网上查了一下,发现有以下几种方式传递参数:

一.直接把sql查询语句完整写入字符串

     try:
connection = MySQLdb.connect(user="secsel",passwd="secsel@55",host="192.168.138.55",db="anbench")
except:
print "Could not connect to MySQL server."
exit( 0 ) cursor = connection.cursor()
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类型传递变量

 sql = “INSERT INTO user VALUES(%(username)s, %(password)s, %(email)s)”

 value = {“username”:zhangsan,

 “password”:123456,

 “email”:123456@ouvps.com}

 cur.execute(sql, value)

上面这种方法适合字段比较多的时候,变量顺序不会错。

附上我写的脚本代码相关部分:

 def get_apkpath(apk_md5):
try:
connection = MySQLdb.connect(user="***",passwd="***",host="192.168.***.***",db="***")
except:
print "Could not connect to MySQL server."
exit( 0 ) cursor = connection.cursor()
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) #注意不要加引号
print "Rows selected:", cursor.rowcount for row in cursor.fetchall():
print "note : ", row[0], row[1], row[2]
cursor.close()
return row[2]

Python连接MySQL数据库执行sql语句时的参数问题的更多相关文章

  1. Python 连接Mysql数据库执行语句操作

    学习Mysql模块的使用,模块命名的坑,解决SHA加密错误无法连接

  2. JDBC连接MYSQL,批量执行SQL语句或在执行一个SQL语句之前执行一个SQL语句

    conn = MysqlJdbcUtils.getConnection(); Statement ps=conn.createStatement(); ps.addBatch("trunca ...

  3. Python3.0 操作MySQL数据库执行SQL语句

    py3不支持MySQLdb,需要导入pymysql模块 # coding: utf-8 # Team : Quality Management Center # Author:Carson # Dat ...

  4. MySQL数据库执行sql语句创建数据库和表提示The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working

    MySQL创建数据库 只想sql文件创建表时候提示 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to ha ...

  5. Python MySQLdb 执行sql语句时的参数传递

    使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd=&qu ...

  6. Python连接MySQL数据库的多种方式

    上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器 ...

  7. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  8. pymysql模块使用---Python连接MySQL数据库

    pymysql模块使用---Python连接MySQL数据库 浏览目录 pymysql介绍 连接数据库 execute( ) 之 sql 注入 增删改查操作 进阶用法 一.pymysql介绍 1.介绍 ...

  9. mysql(数据库,sql语句,普通查询)

    第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什 ...

随机推荐

  1. Windows远程桌面Debian配置

    由于xrdp.gnome和unity之间的兼容性问题,在Debian仍然无法使用xrdp登陆gnome或unity的远程桌面,现象是登录后只有黑白点为背景,无图标也无法操作.使用xrdp只能登录xfc ...

  2. 2.HTML标签

       <a>      链接标签 1) <a href=“#”>这是个链接</a> 表示空链接 2) 未访问过的链接 显示蓝色字体并带下划线;访问过的链接 显示紫色 ...

  3. Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器

    修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...

  4. 基于JVM(内存)和Tomcat性能调优

    一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   MemoryUsa ...

  5. win7 下安装oracle 10 g

    首先下对版本,Oracle 10g支持Win7版: http://download.oracle.com/otn/nt/oracle10g/10203/10203_vista_w2k8_x86_pro ...

  6. swift版的CircleView

    swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...

  7. 使用linux远程登录另一台linux

    可以用ssh命令行方式登录.对方需要开启ssh服务.   ssh [-l login_name] [-p port] [user@]hostname   例如,使用root用户登录 192.168.0 ...

  8. 初学Linux(一)关闭操作shutdown halt reboot

    1.shutdown –h 10 #这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中. 2.Shutdown –h now #立马关机 3.Shutdown –h 11:1 ...

  9. vs2012配置

    ogre1.9 http://m.blog.csdn.net/blog/u013025310/20869871 http://www.cnblogs.com/zhouxin/p/4258849.htm ...

  10. 【问题记录】centos 开机启动命令未执行

    查看日志 /var/log/boot.log 看具体原因,有可能脚本执行有问题, 当你在系统已经启动的时候,脚本执行没问题不代表开机启动能运行