【Python】python讀取文件操作mysql


尾大不掉,前陣子做檢索測試時,總是因為需要業務端操作db和一些其他服務,這就使得檢索測試對環境和數據依賴性特別高,極大提高了測試成本。

Mock服務和mysql可以很好的解決這個問題,所以那陣子做了兩個工作:

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

2 使用python語言Mock mysql數據。

部分1只需要了解公司框架即可進行編寫,本文主要記錄下python操作mysql的部分。

一 安裝環境

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

[root@bjdhj-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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM