使用原始sql(mysql)批量插入不使用加载数据infile并忽略#行

时间:2011-03-17 20:41:25

标签: mysql django bulkinsert

我正在尝试使用django中的原始sql插入行:

输入文件有15行,使用'#'“注释掉”。

文件的其余部分以制表符分隔,并以'\ n'结尾。

我试图使用IGNORE<#>忽略前15行。我的LOAD DATA INFILE语句中的LINES子句。

使用以下代码:

def my_custom_sql():
    from django.db import connection, transaction
    cursor = connection.cursor()
    statement = "LOAD DATA LOCAL INFILE '/home/dev/ttam/data/temp.ttam' INTO TABLE ttam_genotypeentry (snp_id, @dummy1, @dummy2, genotype) SET subject_id=%i IGNORE 15 LINES;" % subject.pk
    cursor.execute(statement)
    transaction.commit_unless_managed()

我收到以下错误:

DatabaseError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IGNORE 15 LINES' at line 1")

使用语句(删除IGNORE 15 LINES):

statement = "LOAD DATA LOCAL INFILE '/home/dev/ttam/data/temp.ttam' INTO TABLE ttam_genotypeentry (snp_id, @dummy1, @dummy2, genotype) SET subject_id=%i;" % subject.pk

我收到此错误:

IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`ttam_genotypeentry`, CONSTRAINT `snp_id_refs_rs_id_50bcd16b` FOREIGN KEY (`snp_id`) REFERENCES `ttam_snp` (`rs_id`))')

如果我手动删除输入文件的前15行,操作将继续进行而不会出现问题。

我正在使用:

django:Django version 1.3 rc 1

mysql:Server version: 5.1.49-1ubuntu8.1 (Ubuntu)

如何忽略输入文件的前15行?

1 个答案:

答案 0 :(得分:1)

尝试将IGNORE n LINES子句移到SET子句之前。

statement = "LOAD DATA LOCAL INFILE '/home/dev/ttam/data/temp.ttam' INTO TABLE ttam_genotypeentry (snp_id, @dummy1, @dummy2, genotype) IGNORE 15 LINES SET subject_id=%i;" % subject.pk