当前位置: 首页 > 知识库问答 >
问题:

Perl如何使用DBIx::Class返回数据

狄峰
2023-03-14

我是DBIx::Class的新手。我用它作为API从我的数据库中重新运行数据,我想用DBIC重新创建一个SELECT*from表。对于DBI,它对我很有效
返回数据“漂亮”的最佳方法是什么
我想以哈希数组的形式返回数据,如:

[
  {
    id => 123,
    name => 'name',
    ....
  }
]

但是使用my@rs=$schema-

$VAR1 = bless( {
              '_column_data' => {
                                  'name' => 'test',
                                  'id' => 123'
                                },
              '_result_source' => $VAR1->{'_result_source'},
              '_in_storage' => 1
            }, 'DB::Schema::Result::Product' );

我肯定我误解了DBIC的概念。
我怎么能只得到所有科伦的数据?谢谢大家的帮助!


共有3个答案

澹台欣怿
2023-03-14
my @rs = map {$_->_column_data} $schema->resultset('Product')->all

? 这就是说,按照惯例,带前导下划线的字段是“私有”字段,很可能没有文档记录或文档不足,或者在未来的实现中可能会在不通知的情况下更改,您应该警惕直接访问它们。

由于DBIx::Class的目的是将数据库行转换为对象,因此应该将结果集视为对象数组。要将其向下转换为适合与Data::Dumper一起使用的哈希,可以执行以下操作:

my @rs = map { { name => $_->name, id => $_->id } } $schema->resultset('Product')->all
齐磊
2023-03-14

我认为最简单的方法就是get_inflated_columns方法。

map {{$_->get_inflated_columns}} $rs->all

考虑使用数据::转储,如果你真的想要漂亮的东西,数据::打印机。

拓拔嘉运
2023-03-14

数据:转储程序只是泄漏了数据结构的内部。这就是DB::Schema::Result::Product对象的核心,它代表产品表的一行。

如果你想从一个对象获得漂亮的输出,你需要向该对象索取。可以对它们调用DBIx::Class::Row方法。如果只需要对象中的行数据,请使用get_columnsget_columns。它们返回一个散列,所以你需要引用。

my @rows = map { my %h = $_->get_columns; \%h } @rs;
 类似资料:
  • DBIx::Class 是一个Perl语言的数据库对象映射框架

  • 我有一个DBIx::Class查询,需要太长时间才能完成。 以下所有SQL都是由DBIx::Class生成的。 第一个场景(DBIx简单选择): DBIx查询时间:0.390221s(正常) 第二种场景(使用where的DBIx简单选择): DBIx查询时间:29.27025s!!:( 第三种场景(使用pgadmin3运行上述查询): pgadmin查询时间:25ms(ok) 相同的查询是相当快使

  • 通常SQLite的排序规则区分大小写。所有大写字母都在小写字母之前。但是可以在子句中告诉SQLite忽略这一点,方法是: 但是我们如何使用DBIx::Class来实现这一点呢? 考虑下面的示例,它将一个SQLite数据库部署到内存中,表中包含“代码> Foo”和“一个目录<代码>栏<代码>。连接使用设置。它填充值,然后使用结果集上的将它们取出来。我将在以下所有示例中使用此设置。您需要DBIx::C

  • 问题内容: 说我有一些Java代码: 还有一些代码可以加载: 能永远?为什么/为什么不呢?如果是这样,在什么情况下? 问题答案: 根据此方法javadoc: 返回该类的类加载器。一些实现可能使用null来表示引导类加载器。如果此类是由bootstrap类加载器加载的,则此方法在此类实现中将返回null。

  • 问题内容: 我正在使用Bottle编写一个API ,到目前为止,一切都很棒。但是,在尝试返回JSON数组时遇到了一个小障碍。这是我的测试应用程序代码: 当我运行它并请求每条路线时,我会从前两条路线得到我期望的JSON响应: /单 / containsarray 因此,我曾期望返回一个字典列表来创建以下JSON响应: 但是,请求路线只会导致错误。我在做什么错,如何以这种方式返回JSON数组? 问题答

  • connect_info文档: 连接信息 这个方法通常由DBIx::Class::Schema中的“connection”调用,它在将参数列表传递到这里之前将其封装在arrayref中。 参数列表可能包含: > 在DBI中通常传递给“连接”的相同的4元素参数集,可选地后面跟着DBIx::Class识别的额外属性: 一个单独的代码引用,返回一个连接的DBI数据库句柄,可选地后跟DBIx::Class