mysql загрузка данных INFILE с автоинкрементным первичным ключом - PullRequest
14 голосов
/ 26 апреля 2010

Я пытаюсь загрузить файл данных в таблицу mysql, используя «LOAD DATA LOCAL INFILE» имя файла «INTO TABLE» имя таблицы ».

Проблема в том, что файл данных источника содержит данные всех полей, но первичный ключ отсутствует (столбец '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'"

есть идеи?

Резюме: создать таблицу с дополнительным полем идентификатора, который будет автоматически увеличиваться загрузить данные (20 столбцов) в таблицу из 21 поля, пропустив поле id пусть поле id автоматически заполнится индексом автоинкремента.

Ответы [ 5 ]

20 голосов
/ 26 апреля 2010

Укажите список столбцов:

По умолчанию, когда в конце инструкции 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

3 голосов
/ 25 марта 2011
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

1 голос
/ 22 февраля 2012

ваш файл данных должен выглядеть так: null, изучение символов, другие области ... MySQL вставит увеличенный идентификатор вместо нуля

0 голосов
/ 24 марта 2011

Используйте следующий запрос в случае, если запись в формате csv похожа на это

"21231", "234424", "Моя категория", "1"

НАГРУЗКА ДАННЫХ ЛОКАЛЬНЫЙ ИНФИЛЬ 'C: /wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' В ТАБЛИЦЫ ПОЛЯ КОТОВ, ЗАКОНЧЕННЫЕ ',' ЗАКРЫТЫМИ '' ' ЛИНИИ, ПРЕКРАЩЕННЫЕ '\ r \ n' (Category_id, parent_id, категория, is_leaf)

Я сделал это успешно. :)

0 голосов
/ 27 апреля 2010

список столбцов должен находиться в самом конце, а столбец id должен иметь set = null для автоматического увеличения - К сожалению, документация к MySQL очень расплывчата. они просто говорят col1, col2, но находятся в исходном файле или в таблице dest. Эта страница очень помогла на наглядных примерах.

http://www.experts -exchange.com / статьи / База данных / MySQL / Load-разделителями-данных в MySQL-Server.html-

...