mysql LOAD DATA INFILE 与自动增量主键

Posted

技术标签:

【中文标题】mysql LOAD DATA INFILE 与自动增量主键【英文标题】:mysql LOAD DATA INFILE with auto-increment primary key 【发布时间】:2011-02-12 13:11:23 【问题描述】:

我正在尝试使用“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 列)加载到 21 个字段的表中,跳过 id 字段 让 id 字段自动填充自增索引。

【问题讨论】:

【参考方案1】:
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】:

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

【讨论】:

【参考方案3】:

如果 csv 记录是这样的,请使用以下查询

"21231","234424","我的类别","1"

加载数据本地文件 'C:/wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' INTO 表猫字段由 ',' 封闭由 '"' 终止 以“\r\n”结尾的行 (category_id,parent_id,category,is_leaf)

我已经成功地做到了。 :)

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

指定列列表:

默认情况下,当 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

【讨论】:

是否有一种简单的方法可以列出所有 20 个列名,可能类似于列表 [1:] 表示法?还是我必须输入每个列的名称,例如 study_no、family_no 等?谢谢 列列表必须在最后,并且 id 列必须有一个 set=null 才能自动递增 要添加列名,你应该可以这样做: cursor.execute("DESCRIBE tablename"); query = "LOAD DATA INFILE 'data.txt' INTO TABLE 表名 (%s)" % ', '.join([x[0] for x in cursor.fetchall()][1:])

以上是关于mysql LOAD DATA INFILE 与自动增量主键的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:启用 LOAD DATA LOCAL INFILE

MySQL通过 LOAD DATA INFILE 批量导入数据

MySql LOAD DATA INFILE 以逗号失败

mysql load data local infile问题

MySQL 之 LOAD DATA INFILE 快速导入数据

LOAD DATA LOCAL INFILE 在 MySQL 中只导入一行