2012-01-23 3 views
2

을 단순화, 나는 펄 스크립트에서 SQL 쿼리와 몇 가지 문제를 발견했습니다펄 모듈 몇 년 동안 SQL 쿼리

  • 그들은
  • 대부분의 개발자가 정말 잘되지 않습니다를 알아보기 힘들 것 SQL로. 나는 다음과 같은 SQL 쿼리를 생성 할 것이다, 나는 모든 빨간색 개를 찾으려면,

    PET   PET_TYPE  COLOR 
    ========  ========== ============ 
    PET_ID  PET_TYPE  COLOR_ID 
    Name   Description Description 
    Owner 
    PET_TYPE 
    COLOR_ID 
    

    을 그리고 :

의 나는 다음과 같은 테이블이 있다고 가정 해 봅시다.

FIND PET_ID, Name, Owner 
FROM PET, PET_TYPE, COLOR 
WHERE COLOR_ID.Description = 'RED' 
     AND PET_TYPE.Description = 'DOG' 
     AND PET.COLOR_ID = COLOR.COLOR_ID 
     AND PET.PET_TYPE = PET_TYPE.PET_TYPE 

나는 쿼리 생성을 단순화 할 Perl 모듈을 원합니다. 데이터베이스 연결을 생성하고 테이블 연결 방법을 미리 정의 할 수있는 어떤 것. 일단 완료되면 모든 개발자는 단순화 된 쿼리 만 수행하면됩니다.

나는 이런 식으로 뭔가 같은 인터페이스를 상상

:

# 
    # Create a new Database Connection 
    # 

    my $db = Some:Module->new(\%options); 

    # 
    # Now describe how these tables relate to each other. 
    # It should be possible to reuse this information for 
    # multiple queries. Maybe even make this a subroutine 
    # or company wide Perl module that will do this for 
    # the developer. 
    # 
    $db->link_tables (
     PET => "COLOR_ID", 
     COLOR => "COLOR_ID 
); 

    $db->link_tables (
     PET  => "PET_TYPE", 
     PET_TYPE => "PET_TYPE", 
); 

    # 
    # Now that you've created a link to the database, 
    # and you've describe how the tables relate to 
    # each other, let's create a query. I'm not 100% 
    # sure of the interface, but it'll be something 
    # like this. There might be multiple `query` 
    # statements. 
    # 

    my $query = $db->query (
    PET_TYPE => "Description = DOG", 
    COLOR => "Description = RED" 
); 

    # 
    # Now, execute this query 
    # 
    $db->execute_query; 

    while (%row = $db->fetch) { 
    say "Dog's name is $row{Pet.Name}"; 
    say "The owner is $row{Pet.Owner}"; 
    } 
    # 
    # Let's find all cats named Wiskers. 
    # We've already described the links, 
    # so that doesn't have to be redone. 
    # 
    my $query = $db->query (
    PET_TYPE => "Description = CAT", 
    PET  => "Name = Wiskers" 
); 

내 설명이 불완전 알고 상관없이 완벽한 모듈이,이 얼마나 당신이 할 수있는 비상 탈출 해치 수 없습니다 원시 SQL 쿼리. 그러나, 아이디어는 다양한 분야 대신에 당신이 원하는 것 (나는 빨간 개 또는 고양이 수염을 원한다)에 프로그램을 집중시키는 것과 대부분의 지출을 어디에서 절을 표 사이에 연결하는 것에 관한 것입니다. 그러면 프로그램하기가 쉬우 며 프로그램을 더 쉽게 이해할 수 있습니다.

이와 같은 모듈이 없으면 하나를 생성합니다. 그러나,이 노력에 몇 주를 보내기 전에, 나는 어떤 일도 중복하지 않도록하고 싶다.

+0

https://www.google.com/search?q=Perl+ORM을 방문해보십시오. 어떤 것이 당신의 상상을 포착하는지보십시오. – ruakh

답변

7

당신이 찾고있는 것은 ORM이라고 생각합니다. 그 중 많은 것들이 있습니다. 당신이 묘사하고있는 것과 정확히 똑같지는 않지만, 기능면에서는 꽤 가깝습니다. Class :: DBI와 DBIx :: Class를 보거나 perl ORM을위한 google을보십시오.

+0

적어도 지금 내가 뭘 찾고 있는지 알고 있습니다 : ORM. 감사 –

2

Class :: DBI, Rose :: DB, DBIx :: Class 등의 모듈이 있습니다. DBIx :: Class가 더 강력하고 많이 업데이트되지만 Class :: DBI는 사용하기가 더 쉽습니다. 나중에 DBIx :: Class로 전환하려면 많은 노력을 기울이지 않아도됩니다.