首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql、perl、从mysql表下载csv

问mysql、perl、从mysql表下载csv
EN

Stack Overflow用户
提问于 2011-11-18 07:25:12
回答 2查看 565关注 0票数 0

我用perl编写了这个脚本,但它崩溃了。数据库可能有百万行。我该怎么做呢?谢谢

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-18 10:07:06

在 $dbh->prepare()之前尝试使用此行

代码语言:javascript
复制
$dbh->{'mysql_use_result'} = 1;

这将告诉MySQL不要在内存中加载整个结果。

票数 2
EN

Stack Overflow用户

发布于 2011-11-18 07:34:57

跳过所有perl,直接转储它:

代码语言:javascript
复制
SELECT * FROM my_table INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; 

它不会包含列名,但您可以调整查询以添加列名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8175820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档