2010-04-26 54 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