Perl有ORM框架吗?

9
创建一个名为person的表
(
    姓名 varchar(15),
    属性1 varchar(15),
    属性2 varchar(1),
    属性3 char(1),
    属性4 int
)
如何使用基本ORM在Perl中通过将上述简单表映射到Perl对象来实现?接下来,我想使用一些类似Perl语法的标准操作来选择结果。例如:

我该如何使用基本的ORM在Perl中,将这个简单的表映射为Perl对象?然后,我希望使用一些类似于Perl语法的基本操作来选择满足某些条件的结果。例如:

@myResults = findAll(attr1 == 3 && attr2 =~ /abc/);

DBIx::Class 对我很有帮助。 - yogman
3个回答

29

第一条规则,不要自己编写ORM。

CPAN上有相当多的ORM,包括...

  • DBIx::Class - 目前可能是最受欢迎的ORM
  • Rose::DB::Object
  • Fey::ORM - 我自己贡献的,最显著的特点是基于Moose,这意味着您可以在基于ORM的类中获得所有Moose的强大功能。

当我看到这个时,我基本上是要说同样的话。Perl 的全部都是关于重用现有代码的。 - glenatron
很好,Perl有三种方法可以做到这一点。然而,能否支持对这三个库进行比较和对比呢?流行度是一个标准,简单性和使用时间是另一个标准。 - anon
这可能最好作为一个新问题提出。 - Dave Rolsky
如果您告诉我们什么对您来说很重要,那么比较它们会更容易。 :) - brian d foy
你应该编辑问题以包含你请求的额外信息。 - Shabbyrobe

0
(晚响)Data::ObjectDriver(也在CPAN上)提供了极大的灵活性,特别是如果分区和缓存是您要求列表中的话。

0

对于这个建议,我会使用DBIx::Class。以下是一些代码,用于内省一个包含50个表的遗留数据库(其中模式中指定了关系):

#!/usr/bin/perl
use warnings;
use strict;
use DBIx::Class::Schema::Loader qw/ make_schema_at /;

make_schema_at("Zotero::Schema",
               {
                   # components => ['InflateColumn::DateTime'],
                   debug => 1,
                   relationships => 1,
                   dump_directory => './lib' ,
               },
               ["dbi:SQLite:dbname=../zotero.sqlite", "",""]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接