Массовая вставка с использованием raw sql (mysql) не работает с загрузкой данных infile и игнорирует # строк - PullRequest
0 голосов
/ 17 марта 2011

Я пытаюсь вставить строки, используя raw sql в django:

Входной файл содержит 15 строк, которые «закомментированы» с помощью «#».

Остальная часть файлаявляется символом табуляции и завершается символом '\ n'.

Я пытаюсь игнорировать первые 15 строк, используя предложение IGNORE <#> LINES в моем операторе LOAD DATA INFILE.

, используя следующеекод:

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 Ответ

1 голос
/ 17 марта 2011

Попробуйте переместить предложение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...