1 # ! / Usr / bin / python3 2 3 importação pymysql 4 importação datetime 5 importação json 6 importação aleatório 7 importação log 8 9 logging.basicConfig (nome = " test_ods_incre_hour.log " , fileMode = " uma " , 10 format = " % (asctime) s -% (funcname) s -% (lineno) d -% (levelname) s:% (mensagem) s " , nível = logging.INFO) 11 consola = logging.StreamHandler () 12 . Logging.getLogger () addHandler (consola) 13 14 table_name = " liuyue_test_large_data " 15 cur_date = datetime.datetime.today () strftime. ( " % Y-% m-% d% H:% M:% S " ) 16 17 def gen_rows (rowsnum, onenum = 10, ID1 = 0): 18 ID1 = id1 se (ID1) else 0 19 nome1 = " liuyue_ " 20 endereço1 = " xiangyang_ " 21 band1 = " 15_ " 22 = 0,234 mony1 23 é isNative 1 =. 24 secretKey = 0 25 CreateDate = cur_date 26 é UPDATE_DATE = cur_date 27 special_char1 R & lt = " P01 ~ · @ # ¥% ...... & * () - + = - {} [], |! ' ' "";:? " ", {} \ n \ r n \ t lá _ \ seguintes dados " 28 description1 = " versão Yen de Chen, versão Lee de Chen, e não como a versão final do Chen mais clássico _ " 29 = test_null ' nula ' 30 linhas = [] 31 é 32 para I em Gama (1, rowsnum + 1.. ): 33 é ID = id1 + i 34 nome = Nome1 + str (ID) de 35 de endereços = endereço1 + str (ID) 36 banda = band1 + str (ID) 37 mony = mony1 + ID 38 isnative = random.choice ([0,1 ]) 39 secretkey = random.randint (100000,999999 ) 40 special_char = special_char1 + str (ID) 41 Descrição = description1 + str (ID) 42 linha = (id, nome, endereço, banda, mony, isnative, secretkey, createdate, UPDATE_DATE , special_char, descrição, test_null) 43 # fileira = (id, nome) 44 rows.append (linha) 45 , se (i% onenum == 0): 46 rendimento fileiras 47 linhas = [] 48 rendimento linhas 49 50 51 def execute_sql (sqlstr): 52 db = pymysql.connect ( " 10.136.142.111 " , " liumin1 " , " liumin1 " , " liumin1 " ) 53 do cursor = db.cursor () 54 Dados = Nenhum 55 tentativa : 56 cursor.execute (sqlstr) 57 se (sqlstr.lower () startswith (. " seleccionar " )): 58 dados = cursor.fetchone () 59 db.commit () 60 excepto de excepção como e: 61 logging.info (e) 62 logging.info ( " 执行失败的SQL是:% s " % sqlstr) 63 db.rollback () 64 db.close () 65 de retorno de dados se (dados)mais Nenhum 66 67 def get_mix_id (): 68 sqlstr = " seleccionar max (ID) de% s " % nome_da_tabela 69 res = execute_sql (sqlstr) 70 logging.info ( " 当前数据库中最大id为:% s " % res [ 0]) 71 de retorno res [0] 72 73 def insert_large_data (rowsnum, onenum = 10 ): 74 db = pymysql.connect ( " 10.136.142.111 " , " liumin1 " , " liumin1" " Liumin1 " ) 75 do cursor = db.cursor () 76 77 sqlstr = " inserção em valores de% s " % nome_da_tabela 78 ID1 = get_mix_id () 79 n = 0 80 para i em gen_rows (rowsnum, onenum, ID1): 81 se ( não i): 82 continuar 83 para j no i: 84 sql_tmp = json.dumps (j, ensure_ascii = FALSE) [1: -1 ] 85 sqlstr sqlstr + = ' ( ' + sql_tmp + ' ) ' + ' ' 86 87 sqlstr sqlstr = [: -. 1 ] 88 # logging.info ( "SQL é gerado:% S" sqlstr%) 89 a tentativa : 90 o cursor.execute (sqlstr) 91 é a excepção excepção, tal como E: 92 logging.info (E) 93 # logging.info ( "execução SQL é falhou:% S" sqlstr%) 94 # db.rollback () 95 n-n- + = 1 96 SE (% N- 10 == 0): 97 a db.commit () 98 logging.info ( " submetido% d bem sucedida, foi adicionada a quantidade de dados:% d artigo " % (n-10 //, onenum * n-)) 99 100 sqlstr = " inserir em% s valores " % nome_da_tabela 101 a db.commit () 102 db.Close () 103 logging.info ( " inserção sucesso SQL, está inserido o número de registos: D% " % rowsnum) 104 105 106 DEF update_data (change_num): 107 max_id = get_mix_id () 108 parai na gama (change_num): 109 random_id = random.randint (1 , max_id) 110 sqlstr = " Descrição conjunto actualização% s = "actualização por autoteste, actualização de tempo é% s", UPDATE_DATE = "% s" onde ID =% d; ' % (Table_name, cur_date, cur_date, random_id) 111 execute_sql (sqlstr) 112 logging.info ( " 修改的表是:% s,修改的记录ID是:% d " % (table_name, random_id)) 113 114 115 # def principal (): 116 # insert_large_data (3,2) 117 # update_data (3) 118 119 logging.info ( " Iniciar Tarefa ... " ) 120 # cada ficha actualização número 121 # update_data (. 3) 122 # cada ficha adicional número 123 insert_large_data (30000,5000 ) 124 logging.info ( " tarefa final .. . \ o n- " )
desempenho no banco de dados das diferentes formas de comparação:
1,23 segundos, 30,000, o primeiro inserto 5000, a inserção de uma pluralidade de tempos (10), apresentar um
2,37 segundos, 30,000, o primeiro inserto 5000, a inserção de uma apresentação para os próximos
3, 33 minutos, 0 segundos, 30,000, o primeiro inserto 1 tira, inserir uma apresentação para o próximo