• 【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("
    ",""))   #对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
  • 相关阅读:
    类似-Xms、-Xmn这些参数的含义:
    类似-Xms、-Xmn这些参数的含义:
    类似-Xms、-Xmn这些参数的含义:
    类似-Xms、-Xmn这些参数的含义:
    Java 虚拟机是如何判定两个 Java 类是相同的?
    Java 虚拟机是如何判定两个 Java 类是相同的?
    Java 虚拟机是如何判定两个 Java 类是相同的?
    Java 虚拟机是如何判定两个 Java 类是相同的?
    互联网支付系统整体架构详解
    DTO
  • 原文地址:https://www.cnblogs.com/zhaoxd07/p/5207134.html
Copyright © 2020-2023  润新知