Pythonpython读取文件操作mysql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pythonpython读取文件操作mysql相关的知识,希望对你有一定的参考价值。

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

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

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

2 使用python语言Mock mysql数据。

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

一 安装环境

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

[[email protected]118-69 ~]# python
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> 

二 实现python操作数据库

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

#-*- coding:utf-8 -*-
import MySQLdb
from itertools import islice 
try:
    conn = MySQLdb.connect(host=localhost,user=root,passwd=123456,port=3306,charset=utf8)#连接mysqldb
    cur = conn.cursor()
    conn.select_db(test)
#    cur.execute(select max(id) from student)#获取mysql中该表的自增键最大值,向后添加。
#    maxid = cur.fetchall()[0]
#    print maxid%id%maxid
#    start = count+1
    f = file(data2.txt)  
    list = []
    line_num = 1
    for line in islice(f,1,None):#读取txt文件,跳过标题行
        strs = line.split(",")   #文件各字段逗号分隔
        line_num = line_num+1
        print len(strs)
        if len(strs)!=25:        #缺少字段时,跳过该行
            print %d 行缺少字段,请检查文件%line_num
            continue
        data = (strs[0],strs[1],strs[2],strs[3],strs[4],strs[5],strs[6],strs[7],strs[8],strs[9],strs[10],strs[11],strs[12],strs[13],strs[14],strs[15],strs[16],strs[17],strs[18],strs[19],strs[20],strs[21],strs[22],strs[23],strs[24].replace("\n",""))   #对strs[24]空格进行处理
        print data
#    start = start+1
        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[0],e.args[1])

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

#-*- coding:utf-8 -*-
import MySQLdb
conn = MySQLdb.connect(host=localhost,user=root,passwd=123456,port=3306,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(1,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:5185173207809, 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

 

以上是关于Pythonpython读取文件操作mysql的主要内容,如果未能解决你的问题,请参考以下文章

pythonpython读写文件,都不乱码

pythonpython操作剪切板-pyperclip模块

pythonpython操作redis

Pythonpython2.7 安装配置OpenCV2

python操作Mysql数据库

安装mysql5.5遇到的狗屁问题