1 # ! / Usr / bin / python3 2 3 importación pymysql 4 importación de fecha y hora 5 importación json 6 importación aleatorio 7 importación de registro 8 9 logging.basicConfig (filename = " test_ods_incre_hour.log " , fileMode = " un " , 10 format = " % (asctime) s -% (Nombre de función) s -% (lineno) d -% (levelname) s:% (mensaje) s " , nivel = logging.INFO) 11 consola = logging.StreamHandler () 12 . Logging.getLogger () addHandler (consola) 13 14 nombre_tabla = " 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 si (id1) más 0 19 nombre1 = " liuyue_ " 20 address1 = " xiangyang_ " 21 BAND1 = " 15_ " 22 = 0,234 mony1 23 es isNative 1 =. 24 SecretKey = 0 25 CreateDate = cur_date 26 es UPDATE_DATE = cur_date 27 special_char1 R ^ = " P01 ~ · @ # ¥% ...... & * () - + = - {} [], |! ' " "";:? " ", {} \ n \ r n \ t existe _ \ siguientes datos " 28 description1 = " versión Yen Chen, versión Lee, de Chen, no como la versión final de Chen más clásico _ " 29 = test_null ' nulo ' 30 filas = [] 31 es 32 por I en la gama (1, rowsnum + 1.. ): 33 es id = id1 + i 34 name = nombre1 + str (id) 35 address = address1 + str (id) 36 banda = BAND1 + str (id) 37 mony = mony1 + Identificación del 38 isnative = random.choice ([0,1 ]) 39 secretkey = random.randint (100000,999999 ) 40 special_char = special_char1 + str (id) 41 Descripción = description1 + str (id) 42 fila = (id, nombre, dirección, banda, Mony, isnative, secretkey, CreateDate, UPDATE_DATE , special_char, descripción, test_null) 43 # fila = (id, nombre) 44 rows.append (fila) 45 si (i% onenum == 0): 46 rendimiento filas 47 filas = [] 48 rendimiento filas 49 50 51 def execute_sql (sqlstr): 52 db = pymysql.connect ( " 10.136.142.111 " , " liumin1 " , " liumin1 " , " liumin1 " ) 53 cursor = db.cursor () 54 datos = Ninguno 55 try : 56 cursor.execute (sqlstr) 57 si (sqlstr.lower () startswith (. " seleccionar " )): 58 de datos = cursor.fetchone () 59 db.commit () 60 excepto Excepción como e: 61 logging.info (e) 62 logging.info ( " 执行失败的SQL是:% s " % sqlstr) 63 db.rollback () 64 db.close () 65 de retorno de datos si (datos)más Ninguno 66 67 def get_mix_id (): 68 sqlstr = " SELECT MAX (id) de% s " % nombre_tabla 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 cursor = db.cursor () 76 77 sqlstr = " inserción en valores de% s " % nombre_tabla 78 id1 = get_mix_id () 79 n = 0 80 para i en gen_rows (rowsnum, onenum, id1): 81 si ( no i): 82 continúan 83 para j en 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 se genera:% S" sqlstr%) 89 el try : 90 la cursor.execute (sqlstr) 91 es la excepción excepción AS E: 92 logging.info (E) 93 # logging.info ( "ejecución SQL ha fallado:% S" sqlstr%) 94 # db.rollback () 95 n-n- + = 1 96 SI (% N- 10 == 0): 97 el db.commit () 98 logging.info ( " presentado% d éxito, la cantidad de datos ha sido añadido:% d artículo " % (n-10 //, onenum * n-)) 99 100 sqlstr = " insertar en% S valores " % nombre_tabla 101 la db.commit () 102 db.Close () 103 logging.info ( " inserto éxito sql, se inserta el número de registros: D% " % rowsnum) 104 105 106 DEF update_data (change_num): 107 max_id = get_mix_id () 108 parai en rango (change_num): 109 random_id = random.randint (1 , max_id) 110 sqlstr = ' actualización% s Descripción set = "actualización por autotest, tiempo de actualización es% s", UPDATE_DATE = "% s" donde id =% re; ' % (Nombre_tabla, cur_date, cur_date, random_id) 111 execute_sql (sqlstr) 112 logging.info ( " 修改的表是:% s,修改的记录ID是:% d " % (nombre_tabla, random_id)) 113 114 115 # def main (): 116 # insert_large_data (3,2) 117 # update_data (3) 118 119 logging.info ( " Iniciar tarea ... " ) 120 # cada registro de actualización número 121 # update_data (. 3) 122 # cada registro adicional número 123 insert_large_data (30000,5000 ) 124 logging.info ( " tarea final .. . \ n- el " )
el rendimiento en la base de datos de los diferentes modos de comparación:
1,23 segundos, 30.000, el primer inserto de 5000, la inserción de una pluralidad de veces (10), presentar un
2,37 segundos, 30.000, el primer inserto de 5000, la inserción de una presentación para los próximos
3, 33 minutos, 0 segundos, 30.000, la primera pieza de inserción 1 tira, insertar una presentación a la siguiente