公司领导要求把自己模拟的数据写入excel表格, 然后把表格给开发,让开发往数据库插入数据 身为一名测试,在想,能否自己把excel里面的数据转为sql,存入本地,然后把这个写好的sql给开发
- 领导提倡测试插入数据,最大的原因是因为测试连接linux,一句句写sql过于麻烦,把文件给开发,让开发批量导入;
- 多写脚本,练习自己的脚本能力,更熟练的掌握运用python的知识
- 写好的sql给开发,为他节约点时间。
自己先创建一个xls表:
import xlrd
class InertSql():
"""读取excel文件,创建sal,存入本地"""
def __init__(self,fil,sheet):
"""fil=excel路径,sheet=表位置,创建一个demo.sql文件,存放生成的sql"""
self.file_path = xlrd.open_workbook(fil)
self.sheet = self.file_path.sheet_by_name(sheet)
self.fil = open("C:\\Users\\chair\\Desktop\\demo.sql",mode='w+',encoding="utf-8")
def __del__(self):
"""读取文件,存入本地后,关闭两个文件"""
self.fil.close()
self.file_path.release_resources()
del self.file_path
def read_exle(self,table):
"""table=表名,keys=字段,values==内容,excel格式:第一行字段,第二行~第N行存放内容"""
keys = self.sheet.row_values(0)
for i in range(1,self.sheet.nrows):
values = [seitch_float(x)for x in self.sheet.row_values(i)]
create_sql = "INSERT INTO {table} ({keys}) VALUES {values};\n".format(table = table,keys = ','.join(keys),values=tuple(values))
self.fil.write(create_sql)
print(create_sql)
def seitch_float(i):
"""输入浮点数N.0转换>>N,输入为null/NULL转换>>'' """
if type(i) == float:
return int(i) if int(i)==i else i
else:
return '' if i =='null' or i =='NULL' else i
if __name__ == '__main__':
fil_path = "C:\\Users\\chair\\Desktop\\demo.xls"
inertsql = InertSql(fil_path,sheet="Sheet1")
inertsql.read_exle('subject')
>>> INSERT INTO subject (ID,CLASSID,SUBJECTNAME,STATYHOUR,GARDEID) VALUES (1, 8, 'java', 81.9, 56);
>>> INSERT INTO subject (ID,CLASSID,SUBJECTNAME,STATYHOUR,GARDEID) VALUES (2, 11, 'java', 117.24, 49);
>>> INSERT INTO subject (ID,CLASSID,SUBJECTNAME,STATYHOUR,GARDEID) VALUES (3, 11, 'db', 40.6, '');
>>> INSERT INTO subject (ID,CLASSID,SUBJECTNAME,STATYHOUR,GARDEID) VALUES (4, 16, 'python', '', '');
>>> INSERT INTO subject (ID,CLASSID,SUBJECTNAME,STATYHOUR,GARDEID) VALUES (5, 13, 'db', 16.92, 52);
本次学习:
- 首次使用while循环,因wile循环次数语法太长了,这是为了在公司使用,所以想法是精简,去除while循环,使用for循环,掌握知识点:.nrows 获取行号
- 读取文件的时候,整数会转为浮点数,这种情况下直接转换,包含0的浮点数统一抓换为整数(后续可能遇到问题,根据问题修改)
- 不同数据库类型,字段为空的值不同,有的copy出来为‘’,有的copy出来为null,统一把excel里面的null和NULL转换为’’
- 初次掌握一行内使用for循环
- 初次掌握一行内使用if…else语句
|