gpt4 book ai didi

mysql - DBI 将获取的 arrayref 转换为哈希

转载 作者:行者123 更新时间:2023-11-29 01:36:37 26 4
gpt4 key购买 nike

我正在尝试编写一个程序来获取一个大的 MySQL 表,重命名一些字段并将其写入 JSON。这是我现在拥有的:

use strict;

use JSON;
use DBI;

# here goes some statement preparations and db initialization

my $rowcache;
my $max_rows = 1000;
my $LIMIT_PER_FILE = 100000;

while ( my $res = shift( @$rowcache )
|| shift( @{ $rowcache = $sth->fetchall_arrayref( undef, $max_rows ) } ) ) {

if ( $cnt % $LIMIT_PER_FILE == 0 ) {

if ( $f ) {
print "CLOSE $fname\n";
close $f;
}

$filenum++;
$fname = "$BASEDIR/export-$filenum.json";

print "OPEN $fname\n";
open $f, ">$fname";
}

$res->{some_field} = $res->{another_field}
delete $res->{another_field}

print $f $json->encode( $res ) . "\n";

$cnt++;
}

我使用了来自 Speeding up the DBI一切似乎都很好。

我现在唯一的问题是在 $res->{some_field} = $res->{another_field} 上,行解释器提示说 $resNot a HASH reference

谁能指出我的错误?

最佳答案

如果你想要fetchall_arrayref要返回哈希引用数组,第一个参数应该是哈希引用。否则,将返回一个 arrayrefs 数组,导致“不是 HASH 引用”错误。因此,为了返回完整的行作为 hashref,只需传递一个空的 hash:

$rowcache = $sth->fetchall_arrayref({}, $max_rows)

关于mysql - DBI 将获取的 arrayref 转换为哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41262899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com