99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀python將csv(中文)導(dǎo)入mysql數(shù)據(jù)庫的簡單代碼
python將csv(中文)導(dǎo)入mysql數(shù)據(jù)庫的簡單代碼
2017-07-04
收藏

python將csv(中文)導(dǎo)入mysql數(shù)據(jù)庫的簡單代碼

使用PHP寫的,源碼我就不貼上來了,寫的比較簡單,先是讀取了csv的第一行,根據(jù)這個創(chuàng)建了表格,然后再利用sql自帶的語句 “l(fā)oad data infile....”將剩下的數(shù)據(jù)讀入到這個表格中。但是剛好服務(wù)器的后臺command line 執(zhí)行的php沒有安裝好,放在browser上的話處理數(shù)據(jù)又不太適合,于是我就自己寫了一個簡單的Python的腳本。

首先csv讀入MySQL 可以使用sql語句直接讀入 代碼如下:

[sql] view plain copy
    LOAD DATA INFILE 'csv_file'  
    IGNORE INTO TABLE table_name  
    CHARACTER SET UTF8  
    FIELDS TERMINATED BY ';'  
    OPTIONALLY ENCLOSED BY '"'  
    LINES TERMINATED BY '\n'  

但是這樣讀入的前提是必須創(chuàng)建一個table之后才能導(dǎo)入到指定的table,下面就是用python先提取了首行(前提是首行就是table的fields),然后再利用上面的sql語句把剩下的導(dǎo)入:
[python] view plain copy

    #coding=utf-8  
    import csv  
    import sys  
    import codecs  
    import MySQLdb  
    reload(sys)  
    sys.setdefaultencoding('utf-8')  
      
    csv_filename=sys.argv[1]  
    database=sys.argv[2]  
    table_name=sys.argv[3]  
      
    file=codecs.open(csv_filename,'r','utf-8')  
    reader=file.readline()  
    b=reader.split(',')  
    colum=''  
    for a in b:  
        colum=colum+a+' varchar(255),'  
    colum=colum[:-1]  
    create='create table if not exists '+table_name+' '+'('+colum+')'+' DEFAULT CHARSET=utf8'  
    data='LOAD DATA LOCAL INFILE \''+csv_filename+'\' INTO TABLE '+table_name +' character set utf8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \''+r'\r\n'+'\' IGNORE 1 LINES;'  
    e=unicode(data,'utf8')  
      
  
    conn=MySQLdb.connect(  
        host='localhost',  
        port=3306,  
        user='root',  
        passwd='',  
        db=database)  
    conn.set_character_set('utf8')  
    cursor=conn.cursor()  
    cursor.execute('SET NAMES utf8;')  
    cursor.execute('SET character_set_connection=utf8;')  
    cursor.execute(create)  
    cursor.execute(e)  
    cursor.rowcount  
      
    conn.commit()  
    cursor.close()  
    print('OK') 

用法在命令行中: python csv_to_sql.py  csv_file  database_name table_name
第一個參數(shù)csv文件(可以不和python腳本放在一個位置,路徑寫對就可以,不過放在一起更方便)
第二個參數(shù)選擇存放的數(shù)據(jù)庫名
第三個需要存入的表格名字。(不需要再去單獨建立表格)
直接在命令行運行,沒有報error錯誤就可以(會報warnning沒關(guān)系)

這里有一點要注意的是,從代碼就可以看出,創(chuàng)建的table的字段都是定義好的了,都是varchar(255),如果需要修改的話,可以到數(shù)據(jù)庫根據(jù)自己的需要修改相應(yīng)的field的屬性。

另外一點就是csv中文的問題了,我要導(dǎo)入就是至少幾十M的中文數(shù)據(jù),所以一開始也遇到了點麻煩(不過Python對中文的支持也不是很好)。這里要先明白一個問題就是csv的文件是什么編碼的,我的 csv是utf8編碼的,如果不是utf8最好先轉(zhuǎn)成utf8的編碼格式。上面的代碼是在Linux服務(wù)器下測試成功的,如果是windows的話,有問題也因該是編碼的問題。

還有就是創(chuàng)建數(shù)據(jù)庫的時候也一定要記得統(tǒng)一用utf8的格式

1、建立數(shù)據(jù)庫連接后   


2、建立數(shù)據(jù)庫游標(biāo)后:


SET NAMES 'utf8';  
它相當(dāng)于下面的三句指令: 
SET character_set_client = utf8; 
SET character_set_results = utf8; 
SET character_set_connection = utf8; 
3、創(chuàng)建表格的時候在表格后面加上:

這樣就沒有問題,其實就是要保證在整個數(shù)據(jù)流動過程中的編碼要一致就可以了

ps:python有 CSV模塊可以而支持讀寫csv文件,不過由于我只是提取一行建立表格所以就這里就沒有用,不過我也嘗試了一下,csv模塊,如果要讀取csv內(nèi)容的話可以用這個模塊,但是這個模塊只支持utf8格式的,其它的格式的需要轉(zhuǎn)碼一下,這個看官方文檔就可以了。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }