Как я могу записать данные из TXT-файла в базу данных? - PullRequest
0 голосов
/ 17 февраля 2011

Если у меня есть txt с определенным количеством строк и столбцов (количество столбцов неизвестно в начале, столбцы разделены табуляцией), как я могу экспортировать данные в базу данных?Мне удалось перебрать первую строку, чтобы подсчитать количество столбцов и создать таблицу соответственно, но теперь мне нужно пройти через каждую строку и вставить данные в соответствующий столбец.Как я могу это сделать?

Пример txt файла:

Name Size Population GDP
aa 2344 1234 12
bb 2121 3232 15
... ... .. .. 
.. .. .. ..

Таблица создана:

CREATE TABLE random id INT, Name char(20), Size INT, Population INT, GDP INT 

Ответы [ 4 ]

1 голос
/ 18 февраля 2011

Использование PostgreSQL COPY , команда, что-то вроде:

COPY random FROM 'filename' WITH DELIMITER '\t'
1 голос
/ 17 февраля 2011

Трудная часть - чтение в текстовых полях.По вашему определению заголовки полей разделяются пробелами.Это правда для текстовых полей?

Общий процесс:

Create an SQL CREATE statement from the header text.
Execute the SQL statement.
While reading a line of text doesn't fail do
    Parse the text into variables.
    Create an SQL INSERT statement using field names and values from the variables.
    Execute the SQL statement.
End-While

Другим решением является преобразование файла TXT в поля табуляции или запятые.Просмотрите документацию базы данных, чтобы узнать, есть ли функция для загрузки файлов , а также найдите символы, используемые для разделения столбцов.

Если вам нужна конкретная помощь, задайте более конкретный или подробный вопрос..

1 голос
/ 17 февраля 2011

что-то вроде этого может работать. Основная идея состоит в том, чтобы использовать операторы print для преобразования строки в команды SQL. затем вы можете выполнить эти команды, используя интерпретатор команд sql.

cat textfile.txt | sed 's/^\([^ ]*\) /'\1' /; s/[ \t]+/,/g;' | awk '($NR!=1) {print "INSERT INTO random (Name,size,population,gdp) VALUES (" $0 ");" }' > sqlcommands.txt

для неизвестного количества столбцов, это может сработать.

cat textfile.txt | sed 's/^\([^ ]*\) /'\1' /; s/[ \t]+/,/g;' | awk '($NR!=1) {print "INSERT INTO random VALUES (ID," $0 ");" }' > sqlcommands.txt

заменить идентификатор на необходимое значение идентификатора. но вам нужно будет выполнить его отдельно для каждого значения идентификатора.

0 голосов
/ 17 февраля 2011

Я работаю с Sybase, где это делает утилита "bcp". Быстрый Google на "Postgres BCP" вызывает это:

http://lists.plug.phoenix.az.us/pipermail/plug-devel/2000-October/000103.html

Я понимаю, что это не самый лучший ответ, но, я надеюсь, он достаточно хорош, чтобы помочь вам.

Да, и вам может понадобиться изменить текстовый формат, сделать его запятым или разделенным табуляцией. Для этого используйте sed.

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