加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:27:30 所属栏目:大数据 来源:网络整理
导读:我正在使用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) 我知道这是因为我使用哈希,但是如果我
我正在使用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 "$csvn";
}

$result->finish;

$database->disconnect;

解决方法

替换“什么在这里”评论和以下循环:
my $fields = join(',@{ $result->{NAME_lc} });
print "$fieldsn";

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

NAME_lc以字母表示字段名称.您也可以使用NAME_uc作为大写,或者在数据库决定返回的情况下使用NAME.

您也应该使用Text::CSV或Text::CSV_XS,而不是尝试滚动您自己的CSV文件,但这是另一个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读