微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在使用DBI来查询sqlite3数据库.我有什么工作,但它不返回列按顺序.例:
Query:  select col1,col2,col3,col4 from some_view;
Output:

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

(values and columns are just for illustration)

我知道这是因为我使用哈希,但是如果我只使用一个数组,我还能如何得到列名?所有我想做的是获得这样的任何任意查询

col1,col4
    1,3,4
    1,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,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,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;

解决方法

替换“什么在这里评论和以下循环:
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文件,但这是另一个问题.

原文地址:https://www.jb51.cc/Perl/172505.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐