MySQL LOAD DATA - загрузка текстового файла с ColumnName = значение формата - PullRequest
0 голосов
/ 05 августа 2009

За последние несколько дней я начал изучать SQL, но застрял при попытке перенести мои данные в таблицу.

Данные хранятся в текстовом файле в формате:

ColumnName1=SomeInteger
ColumnName2=SomeInteger
ColumnName3=SomeString
... etc

До сих пор мне удалось создать таблицу (которая содержит около 150 столбцов, которую я надеюсь разделить и сгруппировать отдельно, когда узнаю больше), удалив =SomeValue в Python. Затем поместите имена столбцов в таблицу CREATE TABLE. Немного грязно, но пока работает.

Теперь я застрял в следующей точке:

LOAD DATA INFILE 'path/to/file.txt'
INTO TABLE tableName
COLUMNS TERMINATED BY '\n'
LINES STARTING BY '=';

Я пытаюсь заставить SQL вставить данные в указанные имена столбцов (если они не всегда в одном и том же порядке), игнорировать знак равенства и использовать уникальное имя файла в качестве индекса. Я также пытался экранировать символ равенства с помощью '\=', потому что в документации MySQL упоминается, что все, что находится до параметра LINES STARTING BY, следует игнорировать. Набрав LINES STARTING BY 'ColumnName1=' удается игнорировать первый экземпляр, но это не совсем то, что я хочу, и не работает для остальных строк.

Я не против читать больше документации или учебников, если кто-то может указать мне правильное направление.

edit: строки разделены следующим образом: мне выдано около 100 000 ini-файлов. Каждый из них называется FirstName_LastName.ini (уникальность гарантирована), и каждая строка данных содержится в INI-файлах. Мне нужно перенести архаичный метод хранения аккаунтов в 21 век. Ходят слухи, что LOAD DATA в MySQL особенно быстры для задач такого типа, поэтому я начал рассматривать их как вариант. Мне просто интересно, можно ли манипулировать им для работы с данными в моем формате, или мне лучше поместить все файлы по 100 Кб через анализатор. Я все еще открыт для предложений, которые используют SQL, если есть какие-нибудь маги, читающие это.

p.s: Если у кого-то есть идеи о том, как перенести мои данные (из этого текстового формата) в отдельные таблицы, я бы тоже хотел их услышать.

1 Ответ

0 голосов
/ 06 августа 2009

Лично я, вероятно, сделал бы все это на python, используя модуль MySQLdb (возможно, доступный в пакете с именем что-то вроде python-mysqldb или MySQL-python в вашем любимом дистрибутиве). Отформатируйте ваши данные в список кортежей, а затем вставьте их. Пример из http://mysql -python.sourceforge.net / MySQLdb.html :

import MySQLdb

datalist = [("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
            ("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
            ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )]

db = MySQLdb.connect(user='dude', passwd='foo', db='mydatabase')
c = db.cursor()

c.executemany(
    """INSERT INTO breakfast (name, spam, eggs, sausage, price)
    VALUES (%s, %s, %s, %s, %s)""",
    datalist)
...