CPAN DBI은 일반 데이터베이스 사용을 위해 Perl에서 사용할 수있는 최상의 데이터베이스 인터페이스입니까? 더 나은 옵션이 있습니까?어떤 Perl 데이터베이스 인터페이스를 사용해야합니까?
답변
있습니다 모든 SQL 문자열 (선택적으로 자리 표시 자 및 바인드 값 포함) 및 쿼리를 실행하고 결과를 다시 제공합니다. — 그렇다면 DBI이 최선의 방법입니다.
코드에서 원시 SQL을 거의 또는 전혀 필요로하지 않는 상위 인터페이스를 원할 경우 Perl에 사용할 수있는 몇 가지 ORM (object-relational mappers)이 있습니다. 자세한 정보와 링크는 Perl Foundation의 Perl 5 위키에서 ORM 페이지를 확인하십시오. (그 중에서 선택을 돕거나 특정 질문이 있으면이 질문의 초점을 좁히거나 다른 질문을 올릴 수 있습니다.)
Class::DBI도 확인하십시오.
제 생각에 DBI는 정말 좋은 선택입니다. 저는 DBD :: mysql을 적극적으로 사용하여 정말 좋은 솔루션이라고 생각했습니다.
우리는 우리의 모든 프로젝트에서도 DBI 모듈을 사용합니다. 여러 번 우리는 특정 애플리케이션을 위해 커스터마이징 된 패키지를 빌드하지만 그 아래에는 핵심 DBI 모듈이 있습니다. 그리고 종종 DBI 모듈 함수를 직접 사용하는 것이 더 쉽습니다.
DBI는 Perl과 DBMS 간의 "저수준"인터페이스입니다. 그렇게하기위한 유일한 현실적인 선택입니다. Java의 JDBC와 비교됩니다. Perl과 데이터베이스 사이의 낮은 수준의 인터페이스를 위해 DBI 이외의 것을 선택하는 것은 미친 짓일 것이다.
DBI 위에는 데이터베이스 작업을 훨씬 쉽고 깔끔하게 해주는 다양한 객체/관계형 매퍼가 있습니다. 당신은 단지 낮은 수준의 데이터베이스 액세스 —을 찾고 있다면
일반/더 인기있는 것들 중 일부는 당신이 그것을 먹이
DBI는 훌륭하지만 DBD 모듈의 품질은 다양 할 수 있습니다. DBD : pg의 버전 중 하나에서 '기능'에 물 렸습니다. 결과를 커서로 처리하는 대신 전체 결과를 메모리에로드하는 것이 좋았습니다.
평소대로 -주의 사항 프로그래머.
개체를 사용하여 작업하려면 (인트로 스펙션을 사용하여), 무스를 기반으로 ORM을 구현하는 Fey :: ORM을 살펴보십시오. 또한 SQL과 유사한 SQL 문을 가지고 있기 때문에 RDBMS 기반의 두뇌를 다른 ORM 프레임 워크보다 조금 더 잘 구현할 수 있습니다.
DBI 바위! DBIx :: Class를 항상 빠르게 사용하는 적절한 기능을 갖춘 ORM이 필요합니다.
ORM이 필요하지 않은 작업에 일반 DBI
을 사용했다면 은 DBIx::Simple을 강력하게 제안합니다.
그것은 대체 아니지만, 없이 간단하고 복잡한 물건 가능한 일을 간단하게 DBI
의 상단에 매우 잘 설계된 API는 DBI
의 유연성을 모두의 손실.
혹시 당신이 (행) 해시 (열 및 값)의 arrayref로 쿼리의 결과를 얻는처럼 DBI
문서에 분명히 간단한 일을 지켜 볼 수밖에 없었 발견 했습니까? DBIx::Simple
와 이 간단하다 :
# DBI
my $rows = $dbh->selectall_arrayref($sql, { Slice => {} });
# tell it we want "hashes" (yuck!) ^^^^
# DBIx::Simple
my $rows = $db->query($sql)->hashes; # does the same as the above code underneath!
더의
examples를 살펴 보자. 또한
SQL::Abstract과 통합하면 간단한 쿼리를 쉽게 만들 수 있습니다. 그것은 내가 전에
DBI
을 사용했을 모든 코드에서 사용하고 나는 뒤를 돌아 보지 않을 것입니다.
"상위 레벨"인터페이스 (SQL :: Abstract와 같은)와 (DBIx :: Simple)의 대다수가 실제로 쿼리를 수행 할 때 DBI 자체를 사용한다는 점은 주목할 가치가 있습니다. DBI는 Perl에서 데이터베이스 연결을 위해 허용되는 표준 방법입니다.
DBIx :: Simple은 DBI 또는 배열 색인 (테이블이 형식을 변경하면 이동할 수있는 이상한 해시 방법)이 아닌 이름으로 결과에 훨씬 깨끗한 액세스를 허용합니다. –