MySQL, Perl, скачать CSV из таблицы MySQL - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть этот скрипт на Perl, и он падает.База данных, вероятно, миллион строк.Как я могу это сделать?Спасибо

sub MYSQL_CREATE_CSV
{
    my ($dbh, $tablename, $csvname) = @_;
    my $mysql_tablename = $dbh->quote_identifier($tablename);

    print "[INFO] EXTRACTING INFO FROM TABLE : $mysql_tablename\n";
    my $sth1 = $dbh->prepare(qq|SELECT * FROM $mysql_tablename | );
    $sth1->execute(  );

    open (FILE, ">$csvname") or die "[ERROR] $0 - cannot write to file : $! \n";
    #   EXTRACT COLUMN NAME
    my @COLUMNNAME = @{$sth1->{NAME}};
    my $temp = join (",",@COLUMNNAME);
    print FILE $temp , "\n";
    while ( my @row = $sth1->fetchrow_array(  ) )
    {
        my $temp = join(",",@row);
        print FILE $temp . "\n";
    }
    close FILE;

    print "[INFO] \t\tCREATING FILE : $csvname \n" if (-e $csvname);
}

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Попробуйте эту строку до $dbh->prepare()

$dbh->{'mysql_use_result'} = 1;

Это скажет, что MySQL не загружает весь результат в память.

1 голос
/ 18 ноября 2011

Пропустить весь Perl и выгрузить его напрямую:

SELECT * FROM my_table INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; 

Он не будет включать имена столбцов как таковые, но вы можете настроить запрос, чтобы добавить их.

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