16

我正在尝试使用“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 字段自动填充自动递增索引。

4

5 回答 5

22

指定列列表:

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

于 2010-04-26T19:15:50.093 回答
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 的情况下

于 2011-03-25T06:53:44.380 回答
2

您的数据文件应如下所示:null、study chars、其他字段... MySQL 将插入递增的 id 而不是 null

于 2012-02-21T22:03:55.253 回答
0

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

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

于 2010-04-26T20:04:40.803 回答
0

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

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

将数据本地 INFILE 'C:/wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' 加载到表猫字段中,由 ',' 封闭由 '"' 由 '\r\n' 终止的行( category_id,parent_id,category,is_leaf)

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

于 2011-03-24T06:29:11.980 回答