Para la inserción de la base de datos, actualizar grandes cantidades de datos

 

  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

 

Supongo que te gusta

Origin www.cnblogs.com/yahutiaotiao/p/12631900.html
Recomendado
Clasificación