我正在尝试使用“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字段自动填充自动增量索引。
答案 0 :(得分:20)
指定列列表:
默认情况下,如果在LOAD DATA INFILE语句末尾没有提供列列表,则输入行应包含每个表列的字段。如果只想加载某些表的列,请指定列列表:
LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
答案 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)
我已成功完成了这项工作。 :)