gpt4 book ai didi

perl - 如何在 Perl 中使用 DBI 按顺序获取列名和行数据?

转载 作者:IT王子 更新时间:2023-10-29 06:19:31 26 4
gpt4 key购买 nike

我正在使用 DBI 查询 SQLite3 数据库。我有什么工作,但它不会按顺序返回列。示例:

Query:  select col1, col2, col3, col4 from some_view;
Output:

col3, col2, col1, col4
3, 2, 1, 4
3, 2, 1, 4
3, 2, 1, 4
3, 2, 1, 4
...

(values and columns are just for illustration)

我知道这是因为我使用的是散列,但如果我只使用数组,我还能如何取回列名?我想要做的就是为任何任意查询得到类似这样的东西:

    col1, col2, col3, col4
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4
...

(也就是说,我需要输出的顺序和列名是正确的。)

我是一个 Perl 新手,但我真的认为这是一个简单的问题。 (我以前在 Ruby 和 PHP 中做过这件事,但我无法找到我在 Perl 文档中寻找的内容。)

这是我目前拥有的精简版:

use Data::Dumper;
use DBI;

my $database_path = '~/path/to/db.sqlite3';

$database = DBI->connect(
"dbi:SQLite:dbname=$database_path",
"",
"",
{
RaiseError => 1,
AutoCommit => 0,
}
) or die "Couldn't connect to database: " . DBI->errstr;

my $result = $database->prepare('select col1, col2, col3, col4 from some_view;')
or die "Couldn't prepare query: " . $database->errstr;

$result->execute
or die "Couldn't execute query: " . $result->errstr;

###########################################################################################
# What goes here to print the fields that I requested in the query?
# It can be totally arbitrary or '*' -- "col1, col2, col3, col4" is just for illustration.
# I would expect it to be called something like $result->fields
###########################################################################################

while (my $row = $result->fetchrow_hashref) {
my $csv = join(',', values %$row);
print "$csv\n";
}

$result->finish;

$database->disconnect;

最佳答案

将“what goes here”注释和以下循环替换为:

my $fields = join(',', @{ $result->{NAME_lc} });
print "$fields\n";

while (my $row = $result->fetchrow_arrayref) {
my $csv = join(',', @$row);
print "$csv\n";
}

NAME_lc 以小写形式给出字段名称。您还可以将 NAME_uc 用于大写,或将 NAME 用于数据库决定返回它们的任何大小写。

您可能还应该使用 Text::CSVText::CSV_XS而不是尝试滚动您自己的 CSV 文件,但这是另一个问题。

关于perl - 如何在 Perl 中使用 DBI 按顺序获取列名和行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2283065/

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