Как мне вывести содержимое таблицы MySQL в файл, используя Perl? - PullRequest
2 голосов
/ 10 мая 2009

Какой лучший способ вывести таблицу MySQL в файл на Perl?

Я использовал:

open( FILE, ">$filename" );
my $sth=$dbh->prepare("select * from table");
$sth->execute();
while ( my $row = $sth->fetchrow_arrayref ) {
    print FILE join( "|", @$row ), "\n";
}

Ответы [ 4 ]

6 голосов
/ 10 мая 2009

Можете ли вы раскошелиться на mysqldump ? Вот для чего это ...

3 голосов
/ 10 мая 2009

Это зависит от того, что вы действительно хотите. Хотите сохранить информацию о схеме и метаданные базы данных? А как насчет имен столбцов? С другой стороны, ваш текущий метод должен нормально работать для хранения data , пока схема и порядок столбцов не меняются, однако вы должны рассмотреть случай какой-либо записи с "|" символ в нем и экранируйте это значение соответствующим образом, и примените соответствующую логику, когда вы читаете и анализируете файл обратно. Возможно, вы захотите заглянуть в Text :: CSV для быстрой, надежной и гибкой реализации, которая выполняет большую часть работы за вас в обоих направлениях, оба пишут чтение файла.

1 голос
/ 10 мая 2009

В зависимости от того, зачем вам это нужно и каков размер и содержание. Предполагая, что вы хотите, не является резервной копией, которая, очевидно, должна иметь другое приложение, кроме perl для. Я хотел бы пойти с чем-то вроде этого, что сохранит ваши столбцы и в некоторых отношениях облегчит передачу данных в другие программы или их передачу, а не CSV.

use XML::Simple;
...
my @rows=();
while ( my $h = $sth->fetchrow_hashref() )
{
   $h->{_ROWNUM}=$#rows;
   push(@rows, $h);
}
print XMLout(\@rows);
1 голос
/ 10 мая 2009

Как уже сказано, это зависит от того, что вы хотите сделать. Если целью является резервное копирование данных, вы должны рассмотреть mysqlhotcopy (если вы используете таблицы MyIsam), который копирует файлы данных / индексов. Это намного быстрее, чем ручной сброс данных (например, я получаю резервную копию объемом 2,5 ГБ примерно за 3 минуты).

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