Para a inserção de banco de dados, atualizar grandes quantidades de dados

 

  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

 

Acho que você gosta

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