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ストリップは、次への提出を挿入します