2010-04-26 111 views
14

我想加載數據文件到mysql表中使用「LOAD DATA LOCAL INFILE'文件名'INTO TABLE'tablename'」。mysql加載數據INFILE與自動增量主鍵

問題是源數據文件包含每個字段的數據,但主鍵丟失('id'列)。我在創建數據庫時添加了唯一的id字段,但現在我需要從下一個字段開始將數據導入到表中,並在導入時自動增加id字段。

def create_table(): 
      cursor.execute (""" 
        CREATE TABLE variants 
        (
        id integer(10) auto_increment primary key, 
        study_no CHAR(40), 
        other fields..... 


        ) 
        """) 

這裏是我的LOAD查詢

query1= "LOAD DATA LOCAL INFILE '"+currentFile+"' INTO TABLE variants FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'" 

什麼想法?

總結: 創建一個表具有附加id字段,將自動遞增 負載數據(20列)成21個字段跳過id字段的表 讓id字段具有自動增量索引自動填充。

回答

20

指定列的列表:

默認情況下,當在LOAD DATA INFILE語句的末尾沒有提供列列表,輸入線預計將包含一個字段爲每個表列。如果你只想要加載一些表中的列中,指定列的列表:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

+0

有沒有簡單的方法列出所有20列名稱可能就像列表[1:]符號?或者我必須輸入每個列名,例如study_no,family_no等? 謝謝 – biomed 2010-04-26 19:35:06

+0

列列表必須位於最後,並且id列必須具有set = null才能自動遞增 – biomed 2010-04-26 20:02:46

+1

要添加列名稱,您應該可以這樣做:cursor.execute(「DESCRIBE tablename」);查詢=「LOAD DATA INFILE'data.txt'INTO TABLE tablename(%s)」%','.join([x:0] for cursor.fetchall()] [1:]) – Aaron 2010-04-26 23:44:22

0

列列表必須在最後和ID列必須有一組= null會自動增加 - 不幸的是,mysql文檔非常含糊。他們只是說col1,col2,但是那些在源文件或dest表中。這個頁面通過清晰的例子幫助了很多。

http://www.experts-exchange.com/articles/Database/MySQL/Load-Delimited-Data-into-MySQL-Server.html

+2

experts-exchange要求付費訂閱訪問他們的網站上的任何討論 - 當參考時,請複製和粘貼&屬性 – Alvin 2011-08-27 03:53:16

+0

是啊...工作鏈接將有所幫助。這不僅是一個付費網站,但頁面被打破。 – lcm 2015-07-26 01:17:31

0

使用以下查詢的情況下,CSV記錄就是這樣

「21231」, 「234424」, 「我的類別」, 「1」

LOAD DATA LOCAL INFILE 'C:/wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' INTO TABLE cats'FIELDS'''''''''''' '\ r \ n' (CATEGORY_ID,對arent_id,category,is_leaf)

我已經成功完成了這項工作。 :)

3
LOAD DATA LOCAL INFILE '/var/www/.........../file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' (field1,field2,.........,fieldn) 

這是在Ubuntu的情況下

1

您的數據文件應該是這樣的: 空,學習字符,其他領域... MySQL將插入空的遞增ID istead