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 local infile问题