尾大不掉,前阵子做检索测试时,总是因为需要业务端操作db和一些其他服务,这就使得检索测试对环境和数据依赖性特别高,极大提高了测试成本。

Mock服务和mysql可以很好的解决这个问题,所以那阵子做了两个工作:

1 使用公司的service框架Mock服务;

2 使用python语言Mock mysql数据。

部分1只需要了解公司框架即可进行编写,本文主要记录下python操作mysql的部分。

一 安装环境

安装python即需要的MySQLdb模块(yum install MySQL-python.x86_64),如下,安装成功。

[root@bjdhj-- ~]# python
Python 2.6. (r266:, Feb , ::)
[GCC 4.4. (Red Hat 4.4.-)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>

二 实现python操作数据库

1 我第一次实现的是读取文件操作数据库(注释掉的为自增键处理)如下:

#-*- coding:utf- -*-
import MySQLdb
from itertools import islice
try:
conn = MySQLdb.connect(host='localhost',user='root',passwd='',port=,charset='utf8')#连接mysqldb
cur = conn.cursor()
conn.select_db('test')
#    cur.execute('select max(id) from student')#获取mysql中该表的自增键最大值,向后添加。
#    maxid = cur.fetchall()[]
#    print 'maxid%id'%maxid
#    start = count+
f = file('data2.txt')
list = []
line_num =
for line in islice(f,,None):#读取txt文件,跳过标题行
strs = line.split(",") #文件各字段逗号分隔
line_num = line_num+
print len(strs)
if len(strs)!=: #缺少字段时,跳过该行
print '%d 行缺少字段,请检查文件'%line_num
continue
data = (strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[],strs[].replace("\n","")) #对strs[24]空格进行处理
print data
#    start = start+
list.append(data) #将data记录到list中,对list执行插入操作
f.close
cur.executemany('insert into creative_info_test values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',list)
conn.commit() #提交
cur.close()
conn.close()
print 'OK'
except MySQLdb.Error,e:
print "MySQL Error %d:%s"%(e.args[],e.args[])

2 领导说每条记录字段太多了(多表多字段),让我固定到脚本里,再单独更改,于是对第一版进行了修改,使用了字典dict:

#-*- coding:utf- -*-
import MySQLdb
conn = MySQLdb.connect(host='localhost',user='root',passwd='',port=,charset='utf8')#连接mysqldb
cur = conn.cursor()
conn.select_db('test')
#逻辑:一次操作只为一次测试使用,所以第一步清除记录;第二步根据条数插入数据;第三个对插入数据进行个性化设置(部分字段的更新)。
try:
        Delete()#数据清除
Producer()#将默认数据插入mysql,注意自增主键
Update()#个性化数据更新
conn.commit()#提交
cur.close()
conn.close()
except MySQLdb.Error,e:
print 'MySQL Error %d,%s'%(e.args[0],e.args[1])
#具体实现:插入数据,由于多表插入,切表与表之间有相同字段,所以根据条数做统一设置。
def Producer():
print 'input numbers :'
num = input()#请多写一条
for i in range(,num):
table1['user_id']=i
table2['user_id']=i...
#insert table1
user_info = [user['user_id']...]
cur.execute('insert into user_test values(%s,...)',table1)
#insert table2
...以下类似处理 def Update():
  print 'input your sql语句 file name:'
  filename = raw_input()
  f=file(filename)
  for line in f.readlines():
    operator your sql update #写update语句即可
def Delete():
cur.execute('delete from table1')
cur.execute('delete from table2')
  ...
#每个表对应一个dict,其字段为字典元素,为各字段设置默认值
table1={
'user_id':'',
'user_name':
...,
}
table2={
...
}

三 附excel文件的读取,嗯,顺便感慨,python真棒:

import csv
f = open('creative_info_test.csv','rb')
reader = csv.reader(f)
for row in reader:
print row
f.close

【Python】python读取文件操作mysql的更多相关文章

  1. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  2. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  3. Python的高级文件操作(shutil模块)

    Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...

  4. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  5. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  6. python在读取文件时出现 'gbk' codec can't decode byte 0x89 in position 68: illegal multibyte sequence

    python在读取文件时出现“UnicodeDecodeError:'gbk' codec can't decode byte 0x89 in position 68: illegal multiby ...

  7. Python之常用文件操作

    Python之常用文件操作

  8. python 从csv文件插入mysql数据库

    一个工作遇到的问题,将excel文件的内容插入到mysql数据库中. 总体思路是 excel文件-->转换成csv文件-->csv文件读取-->读取数据插入mysql数据库 用到py ...

  9. Python开发【第三篇】:Python基本之文件操作

    Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...

随机推荐

  1. Android 一个Activity保存它自己的实例

    一个Activity保存他自己的实例的作用是,在其他Activity中可以方便的调用该Activity里的方法. 我们可以使用一个静态的变量保存当前Activity的实例,并将其标志为private访 ...

  2. CKeditor 配置使用

    CKeditor 配置使用 一.使用方法:1.在页面<head>中引入ckeditor核心文件ckeditor.js<script type="text/javascrip ...

  3. 套题T5//各种树

    树(tree) [题目描述] 方方方种下了三棵树,一年后,第一棵树长出了n个节点. 方方方会向你提出m个询问,每个询问给出两个数i,j,你需要回答i号节点和j号节点在树上的距离. [输入数据] 第一行 ...

  4. 毕向东JAVA视频讲解笔记(前三课)

    1,定义一个类,因为java程序都定义类中,java程序都是以类的形式存在的,类的形式其实就是一个字节码文件最终体现. 2,定义一个主函数.为了让该类可以独立运行. 3,因为演示hello world ...

  5. 进程内核栈、用户栈及 Linux 进程栈和线程栈的区别

    Linux 进程栈和线程栈的区别 http://www.cnblogs.com/luosongchao/p/3680312.html 总结:线程栈的空间开辟在所属进程的堆区,线程与其所属的进程共享进程 ...

  6. Android:文件夹显示红色叹号

    有感叹号,说明有的文件损坏或丢失了 解决方法: 右击工程,Build Path..->Configure Build Path...->Java Build Path 可以看到引用的jar ...

  7. Spring AOP: Spring之面向方面编程

    Spring AOP: Spring之面向方面编程 面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP). 面向对象将应用程序分解成 各个层次的对象,而AOP将程序分解 ...

  8. 使用 Async 和 Await 的异步编程

    来自:http://msdn.microsoft.com/library/vstudio/hh191443   异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要. 对 Web 资源 ...

  9. RMI

    Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力.Java作为一种风靡一时的网络开发语言 ...

  10. Spring IoC — 基于Java类的配置

    普通的POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了,每个标注了@Bean的类方法都相当于提供一个Bean的定义信息. 基于Java类的配置方法和基 ...