2008-11-11 20 views
7
 
create table person 
(
    name varchar(15), 
    attr1 varchar(15), 
    attr2 varchar(1), 
    attr3 char(1), 
    attr4 int 
) 

Làm cách nào tôi có thể sử dụng ORM cơ bản trong Perl bằng cách lấy một bảng đơn giản như bảng trên và ánh xạ nó tới đối tượng Perl? Tiếp theo, tôi muốn thực hiện các thao tác cơ bản như chọn các kết quả bằng cách sử dụng một số hệ thống tiêu chuẩn Perl như cú pháp. ví dụ:Có ORM cho Perl không?

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

DBIx :: Lớp đã làm việc cho tôi. – yogman

Trả lời

26

Quy tắc số 1, không viết của riêng bạn.

Có khá một số ORMs trên CPAN, bao gồm ...

  • DBIx::Class - có lẽ # 1 phổ biến tại thời điểm
  • Rose::DB::Object
  • Fey::ORM - đóng góp của riêng tôi, đáng chú ý nhất cho là Moose dựa trên, có nghĩa là bạn có được tất cả sức mạnh của Moose trong các lớp học dựa trên ORM của bạn.
+0

Tôi đã về cơ bản gửi bài để nói điều tương tự khi tôi thấy điều này. Perl là tất cả về việc sử dụng lại mã hiện có. – glenatron

+0

Thật tuyệt khi Perl có 3 cách để làm điều này. Tuy nhiên, có thể hỗ trợ so sánh và đối chiếu 3 thư viện? Mức độ phổ biến là một tiêu chí. Đơn giản và thời gian để sử dụng là khác. –

+0

điều này có lẽ tốt nhất là một câu hỏi mới của riêng nó. –

0

(Chiming late) Dữ liệu :: ObjectDriver (cũng trên CPAN) cung cấp sự linh hoạt tuyệt vời đặc biệt nếu phân vùng và bộ nhớ đệm nằm trong danh sách các yêu cầu của bạn.

0

Trong số các đề xuất tôi muốn sử dụng DBIx :: Class. Dưới đây là một số mã để xem xét cơ sở dữ liệu kế thừa 50 bảng (với các mối quan hệ được chỉ định trong giản đồ):

#!/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", "",""]); 
Các vấn đề liên quan