我正在尝试使用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行?
答案 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