データベース挿入するには、大量のデータを更新します

 

  1  !は/ usr / binに/のpython3 
  2   
  3  インポートpymysql
   4  インポート日時
   5  インポートJSON
   6  インポートランダム
   7  インポートロギング
   8   
  9 logging.basicConfig(ファイル名= " test_ods_incre_hour.log "、ファイルモード= " " 10                      形式= " % (いるasctime)S - %(FUNCNAME)S - %(LINENO)D - %(levelname)S:%(メッセージ)S "、レベル= logging.INFO)
 11コンソール= logging.StreamHandler()
12  logging.getLogger()はaddHandler(コンソール)
 13  
14 TABLE_NAME = " liuyue_test_large_data " 
15 cur_date = datetime.datetime.today()のstrftime(" %Y-%M-%D%H:%M:%のS " 16  
17  デフ gen_rows(rowsnum、onenum = 10、ID1 = 0):
 18      ID1 = ID1 場合(ID1)そうでなければ0
 19      NAME1 = " liuyue_ " 
20      アドレス1 = " 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 が_ \次のデータ
28      記述1 = チェン、チェンのリーバージョンの円版、陳の最終バージョンとして最も古典的ではない_ " 
29      = test_null ' NULL ' 
30      行= []
 31は     
32      のための I における範囲(1、rowsnum + 1。。 ):
 33のIS         ID = ID1 + I
 34          名= NAME1 + STR(ID)
 35          アドレス=アドレス1 + STR(ID)
 36          バンドのBand1 = + STR(ID)
 37          モニ= mony1 + ID
 38          isnative = random.choice([0,1 ])
 39          秘密鍵= random.randint(100000,999999 40          special_char = special_char1 + STR(ID)
 41          DESCRIPTION =説明1 + STR(ID)
 42          行= (ID、名前、住所、バンド、モニ、isnative、秘密鍵、CREATEDATE、UPDATE_DATE 、special_char、説明、test_null)
43          行=(ID、名前)
44          rows.append(行)
 45          であれば(私%onenum == 0):
 46              収量47              列= []
 48      降伏49  
50  
51  DEF EXECUTE_SQL(sqlstr):
 52      のdb = pymysql.connect(" 10.136.142.111 "" liumin1 "" liumin1 "" liumin1 " 53      カーソル= db.cursor()
 54     データ= なし
 55      試し56          cursor.execute(sqlstr)
 57          であれば(sqlstr.lower()STARTSWITH(。" 選択" )):
 58件の              データ= cursor.fetchone()
 59          db.commit()
 60      を除き、Eなどの例外:
 61          logging.info(E)
 62          logging.info(" 执行失败的SQL是:%S "%のsqlstr)
 63          db.rollback()
 64      db.close()
 65の     戻りデータであれば(データ)なし
 66  
67は DEF :()get_mix_idない
 68      sqlstr = " %sの選択MAX(ID)"TABLE_NAME
 69      RES = EXECUTE_SQL(sqlstr)
 70      logging.info(" :%sの当前数据库中最大のid为"%の解像度を[ 0])
 71の     リターンRES [0]
 72  
73  デフ insert_large_data(rowsnum、onenum = 10 ):
 74      のdb = pymysql.connect(" 10.136.142.111 "" liumin1 "" liumin1" " liumin1 " 75      カーソル= db.cursor()
 76  
77      sqlstr = " %sの値への挿入"TABLE_NAME
 78      ID1 = get_mix_id()
 79      はn = 0
 80      のための I におけるgen_rows(rowsnum、onenum、ID1)。
 81          であればないI):
 82              続行
83          のための J I:
 84              sql_tmp = json.dumps(J、ensure_ascii =偽)[1:-1 ]
85              sqlstr sqlstr + = ' ' + sql_tmp + ' ' + ' ' 86 87          sqlstr sqlstr = [ - 1 ]
 88 logging.info( "SQLが生成されます%がS" sqlstr%)89 トライ90             cursor.execute(sqlstr)    
 91は除く:例外としてE
 92             logging.info(E)
 93 logging.info( "SQLの実行に失敗した:%はS" sqlstr%)94 db.rollback()95          、N-N- + = 1
 96 IF
         
         
                                 
             
         (N-%10 == 0):
 97              db.commit()
 98              logging.info(" %D成功し、データの量が付加された送信:%d個の記事"%(N-10 //、onenum * N-))
 99          
100          sqlstr = " INSERT INTO%S値"TABLE_NAME
 101      db.commit()
 102      db.Close()
 103      logging.info(" SQL成功を挿入し、レコードの数が挿入されている:D%"%のrowsnum)
 104  
105  
106  DEF update_data(change_num):
 107      max_id = get_mix_id()
 108      のためのI における範囲(change_num):
 109          random_id = random.randint(1 、max_id)
 110          sqlstr =   ' 更新%Sセット記述= "自動テストによって更新、更新時間は%sである"、UPDATE_DATE = "%sの" ID =% D; '(TABLE_NAME、cur_date、cur_date、random_id)
 111          EXECUTE_SQL(sqlstr)
 112          logging.info(" 修改的表是:%S、修改的记录ID是た:%d "(テーブル名、random_id))
 113      
114  
115  DEFメイン():
116      #1 insert_large_data(3,2)
117      update_data(3)
118 
119 logging.info(" スタートタスク... " 120  各更新レコード番号
121  #のupdate_data(3)
122  各追加のレコード番号
123 insert_large_data(30000,5000 124 logging.info(エンドタスク.. 。\ N- "

比較の異なる方法のデータベースにパフォーマンス:

1,23秒30,000、最初のインサート5000、複数回の挿入(10)、送信
2,37秒、30,000第一のインサート5000、次への提出を挿入し
、第一インサート3、33分、0秒、30,000 1ストリップは、次への提出を挿入します

 

おすすめ

転載: www.cnblogs.com/yahutiaotiao/p/12631900.html