Python连接MySQL数据库执行sql语句时的参数问题
由于工作需要,今天写了一个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语句时的参数问题的更多相关文章
- Python 连接Mysql数据库执行语句操作
学习Mysql模块的使用,模块命名的坑,解决SHA加密错误无法连接
- JDBC连接MYSQL,批量执行SQL语句或在执行一个SQL语句之前执行一个SQL语句
conn = MysqlJdbcUtils.getConnection(); Statement ps=conn.createStatement(); ps.addBatch("trunca ...
- Python3.0 操作MySQL数据库执行SQL语句
py3不支持MySQLdb,需要导入pymysql模块 # coding: utf-8 # Team : Quality Management Center # Author:Carson # Dat ...
- 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 ...
- Python MySQLdb 执行sql语句时的参数传递
使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd=&qu ...
- Python连接MySQL数据库的多种方式
上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器 ...
- Oracle,SQL Server 数据库较MySql数据库,Sql语句差异
原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...
- pymysql模块使用---Python连接MySQL数据库
pymysql模块使用---Python连接MySQL数据库 浏览目录 pymysql介绍 连接数据库 execute( ) 之 sql 注入 增删改查操作 进阶用法 一.pymysql介绍 1.介绍 ...
- mysql(数据库,sql语句,普通查询)
第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什 ...
随机推荐
- [转载]敏感词过滤,PHP实现的Trie树
原文地址:http://blog.11034.org/2012-07/trie_in_php.html 项目需求,要做敏感词过滤,对于敏感词本身就是一个CRUD的模块很简单,比较麻烦的就是对各种输入的 ...
- C#下使用XmlDocument详解
XML在开发中作为文件存储格式.数据交换的协议用的非常普遍,各个编程语言有都支持.W3C也制定了XML DOM的标准.在这里主要介绍下.Net中的XmlDocument,包括xml读取和写入等功能.一 ...
- 阿里云ECS服务器环境搭建 ubuntu 16.04 图形界面的安装
https://blog.csdn.net/zwq912318834/article/details/80528374
- Apache下开启SSI配置,使html支持include包含
有的时候,我们的页面有公共的导航栏navbar,公共的脚注footer,那么我们就想把这些公共部分独立成一个html文件,在要引用的地方像引用js,css一样,给包含进来. Apache下开启SSI配 ...
- JDBC 连接mysql获取中文时的乱码问题
前段时间学习JDBC,要连接mysql获取数据.按照老师的样例数据,要存一些名字之类的信息,用的都是英文名,我当时就不太想用英文,就把我室友的名字存了进去,嘿嘿,结果,出问题了. 连接数据库语句: s ...
- C++:sprintf()的用法(转)
转:http://blog.csdn.net/masikkk/article/details/5634886 更多:http://blog.csdn.net/zjuwispersure/article ...
- ord 字符转code chr : code转字符
print(ord('刀')) # ord 字符转Unicode # 20992 print(chr(20992)) # Unicode 转成chr(字符)
- #001 CSS快速入门讲解
CSS入门讲解 HTML人+CSS衣服+JS动作=>DHTML CSS: 层叠样式表 CSS2.0 和 CSS3.0 版本,目前学习CSS2, CSS3只是多了一些样式出来而已 CSS 干啥用的 ...
- VS中生成、清理项目、调试、開始运行(不调试)、Debug 和 Release等之间的差别
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/helloUSB2010/article/details/35802437 一.生成和又一次生成 &q ...
- 20155314 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)
20155314 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(macOS + IDEA) 实验内容 使用JDK编译.运行简单的Java程序: 使用IDEA ...