使用python构造大量测试数据_使用python+txt构建测试数据

一、背景

有4张表,每张表要插入多条测试数据。如若还有同种需求,于是写了一个脚本,来添加数据。

二、代码#--coding:utf8--

import pymysql

class InsertTestData(object):

STUDENT_FILE = 'Student.txt'

COURSE_FILE = 'Course.txt'

TEACHER_FILE = 'Teacher.txt'

SCORE_FILE = 'Score.txt'

def __init__(self):

self.connect = pymysql.Connect(

host = 'localhost',

port = 3306,

user = 'root',

# passwd = ' ',

charset = 'utf8'

)

self.database = 'execersise_test'

def read_lines(self, filename):

dict = {}

file_name = filename.split('.')[0]

dict['file_name'] = file_name

with open(filename) as f:

lines = f.readlines()

dict['file_content'] = lines

return dict

def connect_mysql(self):

cursor = self.connect.cursor()

return cursor

def close_mysql(self):

self.connect.close()

def close_curser(self):

self.connect_mysql().close()

def add_test_datas(self, file_obj):

file = file_obj

file_name = file['file_name']

title = file['file_content'][0].strip()

datas = file['file_content'][1:]

content_len = len(datas)

data = ''

counter = 1

for tmpdata in datas:

if counter == content_len:

data += '(' + tmpdata.strip() + ');'

else:

data += '(' + tmpdata.strip() + '),'

counter += 1

sql = 'insert into ' + self.database + '.' + file_name + ' (' + title + ') values '+ data

try:

# self.connect_mysql().executemany(sql)

self.connect_mysql().execute(sql)

except Exception as e:

print('add_' + file_name + ' error: ', e)

self.connect.commit()

self.close_curser()

if __name__ == '__main__':

testdata = InsertTestData()

testdata.add_test_datas(testdata.read_lines(InsertTestData.STUDENT_FILE))

testdata.add_test_datas(testdata.read_lines(InsertTestData.TEACHER_FILE))

testdata.add_test_datas(testdata.read_lines(InsertTestData.COURSE_FILE))

testdata.add_test_datas(testdata.read_lines(InsertTestData.SCORE_FILE))

在main函数中,只需要指定要读取的文件,即可快速插入测试数据。

为了便于构造sql语句,定义的数据文件格式如下:`SID`,`CID`,`Degree`

'103' , '3-245' , '86'

'105' , '3-245' , '75'

'109' , '3-245' , '68'

'103' , '3-105' , '92'

'105' , '3-105' , '88'

'109' , '3-105' , '76'

'101' , '3-105' , '64'

'107' , '3-105' , '91'

'108' , '3-105' , '78'

'101' , '6-166' , '85'

'107' , '6-166' , '79'

'108' , '6-166' , '81'

三、遇到的问题UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence

原因:文件编码不是ANSI;

解决方法:将文件用notepad打开,另存,编码设置为ANSI格式。

入库的中文信息乱码,显示为'?'

原因:在创建数据库时,未将charset设置为utf8;

解决方法:重建数据库,重建表,数据库和表的charset都设置为utf8

如何将sql的values数据构造成‘(),(),();‘的格式

解决方法:增加计数器,当读取到最后一行时,以‘;’结尾

如何通过读取一个文件,同时获取要操作的表名称、列名、values

解决方法:

数据文件的文件名称,定义成表名;

数据文件的titile,即第一行内容,定义成表的列;

数据文件的内容,即第一行之后的内容,定义成表的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值