带有自动增量主键的mysql LOAD DATA INFILE

时间:2010-04-26 18:56:12

标签: python mysql import load-data-infile

我正在尝试使用“LOAD DATA LOCAL INFILE”filename'INTO TABLE'tablename'“将数据文件加载到mysql表中。

问题是源数据文件包含每个字段的数据但缺少主键('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列)加载到跳过id字段的21个字段的表中 让id字段自动填充自动增量索引。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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的情况

答案 2 :(得分:1)

您的数据文件应如下所示: null,学习字符,其他领域...... MySQL将插入递增的id而不是null

答案 3 :(得分:0)

列列表必须位于最后,而id列必须具有set = null才能自动递增 - 不幸的是,mysql文档很模糊。他们只是说col1,col2,但它们是源文件或dest表中的那些。这个页面通过清晰的例子帮助了很多。

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

答案 4 :(得分:0)

如果csv记录与

类似,请使用以下查询
  

“21231”,“234424”,“我的类别”,“1”

     

LOAD DATA LOCAL INFILE   'C:/wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv'             INTO TABLE猫场由'''封闭''''             由'\ r \ n'终止的线路             (CATEGORY_ID,PARENT_ID,类别,is_leaf)

我已成功完成了这项工作。 :)