在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据。如果一条条的插入数据库或者一条条的创建数据,效率未免有点低。如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家介绍一种方法,很简单的也很实用。思路是用python代码写一段小程序,生成一定数量的SQL语句,再把这些SQL语句拷贝黏贴到数据库工具执行SQL即可。
假如有个联系人的学生表student,其表结构为姓名name、学校school、电话telphone、邮箱email。
以Mysq为例子,sql语句如下:
INSERT INTO student(name , shool , telephone , email) VALUES(“小明” ,”万航渡路小学” , 13810001000 ,”xiaoming@gmail.com”);
通过python脚本批量生成1000条待插入的SQL语句
# -*- coding: utf-8 -*- __author__ = '肥猫与猪宝宝' f = open('student.txt', 'w') for i in range(1, 1001): str_i = str(i) name = "张三" + str_i school = "万航渡路小学" telephone = 13810000000 + i email = "张三" + str_i + "@gmail.com" sql = 'INSERT INTO student(name , school , telephone , email) VALUES ("'+name+'" , "'+school+'" , '+str(telephone)+' , "'+email+'");' f.write(sql) f.write(" ") f.close()
运行下,在当前工作目录,生成student.txt。
分析下程序
f = open('student.txt', 'w')
用写的方式打开student.txt这个文件,并赋值给f
for i in range(1 , 1001)
for循环,range代表范围但是不包括1001
sql中的“'+name’”就是拼接,让变量被插入sql
f. write
方法写入( )括号内的内容
f.write(" ")
就是写入的内容换行
f.close()
调用close方法关闭文件,有打开就要有关闭。
在student.txt文件中选中全部sql去mysql工具中执行即可,常见的mysql工具有sqlyog、navicat都是很好用的。
对于数据库插入日期来说,"2020-08-26" 双引号也可以插入,代码如下:
# -*- coding: utf-8 -*- __author__ = '肥猫与猪宝宝' f = open('student.txt', 'w') for i in range(1002, 5001): str_i = str(i) id = "1000" + str_i knight_id = "1921061191" + str_i step = 1000 date = '"2020-08-26"' is_deleted = 0 created_at = '"2020-08-26 15:42:33"' updated_at = '"2020-08-26 15:42:33"' ezone_shard_info = "NULL" drc_check_time = '"2020-08-26 15:42:33"' sql = 'INSERT INTO `tb_knight_daily_donate_step`(id,knight_id,step,date,is_deleted,created_at,updated_at,ezone_shard_info,drc_check_time) VALUES (' + str(id) + ' , ' + str(knight_id) + ' ,'+str(step)+' , '+date+' , '+str(is_deleted)+' , '+created_at+' , '+updated_at+' , '+ezone_shard_info+' , '+drc_check_time+');' f.write(sql) f.write(" ") f.close()
再来个例子:
# -*- coding: utf-8 -*- __author__ = '肥猫与猪宝宝' f = open('student.txt', 'w') for i in range(1, 2000): str_i = str(i) id = "1000" + str_i knight_id = "1921061191" + str_i trace_uuid = '1dfaf46a-920c-4a1e-8391-22633af90' + str_i out_certify_id = "'e164ba0c8dfe31beec12f6de265f3980'" out_scene_type = 1 status = 7 name = '"审核测"' identity = '"34222219930821003X"' hash = '"9cdbaffc6788bb24406e0b4e6456c5c9jpeg"' init_device_id = '"YDSiZVV1lZ0DACrsh+HMNY9N"' init_latitude = "121.380553" init_longitude = "31.231648" complete_device_id = '"YDSiZVV1lZ0DACrsh+HMNY9N"' complete_latitude = "121.380553" complete_longitude = "31.231648" meta_info = "'{"apdidToken":"emkoR+Qg7dnvEPMfJOkk/qnAi1fUDO/z/vhlYhKdDBcaZLH2dwEAAA==","appName":"me.ele.crowdsource","appVersion":"7.8.0","bioMetaInfo":"6.2.0:21478612992,0","deviceModel":"V1824BA","deviceType":"android","osVersion":"10","sdkVersion":"1.1.0","zimVer":"1.0.0"}'" init_time = '"2021-03-17 12:42:33"' complete_time = '"2021-03-17 12:42:33"' init_code = '"OK"' init_desc = '"初始化成功(Z8100)"' result_code = '"OK"' material_matched = '"T"' out_result_info = "'{"secrets":[],"resultCode":"OK","resultMsg":"认证通过(Z8300)","reqMsgId":null,"identityInfo":null,"materialInfo":"{}","materialMatched":"T","passed":"T","reason":null,"success":true}'" date = '"2020-08-26"' is_deleted = 0 created_at = '"2021-03-17 12:42:33"' updated_at = '"2021-03-17 12:42:33"' ezone_shard_info = "NULL" drc_check_time = '"2021-03-17 12:42:33"' sql = 'INSERT INTO `tb_zim`(id,knight_id,trace_uuid,out_certify_id,out_scene_type,status,name,identity,hash,' 'init_device_id,init_latitude,init_longitude,complete_device_id,complete_latitude,complete_longitude,' 'meta_info,init_time,complete_time,init_code,init_desc,result_code,material_matched,out_result_info,' 'is_deleted,created_at,updated_at,ezone_shard_info,drc_check_time) VALUES (' + str( id) + ' , '+str(knight_id)+' ,'+trace_uuid+', '+out_certify_id+' , '+str(out_scene_type)+' , '+str(status)+' , '+name+' , '+identity+' , '+hash+' , '+init_device_id+' , '+init_latitude+' , '+init_longitude+' , '+complete_device_id+' , '+complete_latitude+' , '+complete_longitude+' , '+meta_info+' , '+init_time +' , '+complete_time+' , '+init_code+' , '+init_desc+' , '+result_code+' , '+material_matched+' , '+out_result_info+' ,' + str(is_deleted) + ' , ' + created_at + ' , ' + updated_at + ' , ' + ezone_shard_info + ' , ' + drc_check_time + ');' f.write(sql) f.write(" ") f.close()
到此为止,简单的造数据方法就写完了。