일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 시그널
- pgbench
- Replication
- PERL
- postfix
- Nexenta
- CVSROOT 세팅
- inotify
- 오라클
- 파일시스템
- pvfs
- 리눅스
- php-oracle 연동
- tomcat
- 펄
- Openfiler
- LVS
- ext3
- perltidy
- mailfiler
- ZFS
- connection tunning
- 가상파일시스템
- pgpool-ii
- ext4
- clustering
- 펄 코딩스타일
- 포기해버린꿈
- OCFS2
- pgsql
- Today
- Total
avicom의 신변잡기
Perl에서 DB 접속 본문
NAMEPerlprog - perl & db
DESCRIPTPerl 과 DB의 연동 1 - DBI, DBD 모듈에 관하여
들어가기(Start)이번 부터는 Perl과 데이터베이스 프로그램을 연동하는 것에 대해 알아 보겠습니다. 이것두 어디까지나, 제가 아는 한도내에서 말씀드리겠습니다. 강좌도중 이상하거나, 틀린점이 있으시면, 바로, 게시판이나 멜을 주시기 바랍니다. 전제사항 : 이 글을 읽으시는 분들은 이미 사용하는 DB와 펄에 대하여 어느정도 아신다는 전제하에 썼습니다.
DBI, DBD 모듈에 관하여펄에서 DB와 연동을 하기 위해서는 DBI, DBD모듈이 있어야 합니다. DBI 모듈은 어떤 데이타베이스 프로그램을 쓰든지, 일괄된 함수(메소드)로 프로그래밍을 가능하게 해주며, DBD 모듈은 일종의 구동기입니다. 쓰고자 하는 데이터베이스 프로그램에 맞는 DBD 모듈을 사용하시면 됩니다. 지원되는 DBD 모듈은 아래에 주소로 가시면 확인하실수 있습니다.
DBI, DBD 설치물론 최신버젼을 설치하셨다면, DBI모듈이 설치되어 있을수도 있지만, 그렇지 않은 경우가 더 많으므로, DBI 모듈을 먼저 다운받아 설치 합니다.
Win32 사용자http://www.activestate.com/packages/zips 로 가시면 다운받으실수 있습니다. DBI 모듈은 DBI.zip 이란 이름으로 되어 있습니다. DBD 모듈은.. Mssql 사용자는 B<DBD-ODBC.zip> 파일을 다운받으시면 되구여, Oracle 사용자는 B<DBD-Oracle.zip> 파일을 다운받으시면 됩니다. DBD-db명 - 이런식으로 되어 있으니깐, 자신이 사용하는 DB에 맞는 DBD 모듈을 사용하시면 됩니다. 설치는 위 파일을 다운받으신후 압축을 푸신후(확장자가 ppd로 있습니다) ppm install ***.ppd 하시면 설치가 됩니다. DBI 모듈 설치법도 같습니다.
Linux 사용자http://www.perl.com/CPAN-local/modules/01modules.index.html 으로 가시면 다운받으실수 있습니다. DBI 모듈은 여러가지 있지만, DBI-1.13.tar.gz 를 다운받으시면 됩니다(99/11/15 현재). DBD 모듈은 윈도용 보다는 훨씬 많은 DBD 모듈이 존재 하구요, DBD 카테고리에 상당히 많은 모듈이 존재함을 보실수 있습니다. 본인에게 필요한 DBD모듈을 다운 받드신후, % gzip -cd DBD-**.tar.gz | tar xf - % cd DBD-** % perl Makefile.PL % make % make test % make install 위와같은 순서로 설치 하시면 됩니다. DBI 모듈또한 설치는 같습니다.
DBI 모듈 사용DBI 모듈과 본인의 데이타베이스프로그램에 맞는 DBD 모듈을 설치하셨으면, 이제 준비는 끝났습니다. 우리는 DBD모듈이 어떻게 생겼는지는 몰라도 됩니다. DBI모듈의 사용법만 아시면, 어떤 DB프로그램과도 연동해서 원하는 작업을 하실수 있습니다. 그럼 지금부터, 이 DBI 모듈을 하나씩 보겠습니다. 이 DBI 모듈에는 너무나도 많은 메소드들이 있습니다. 이걸 다 보지는 않구여, 우리는 우리가 필요한 것만 보도록 하겠습니다. 더 많은걸 알고싶으시면 DBI.html 문서를 참조하세요. 다시한번 말씀 드리지만, 어떤 DB를 쓰든지 그건 상관없습니다. 그에 맞는 DBD모듈을 설치하셨다면, 같은 코드를 사용하시면 됩니다. 프로그램에 들어가면, #!/usr/local/bin/perl use DBI; #DBI모듈을 사용한다고 알립니다.
connect() 메소드그러면 우선 우리가 사용하고자 하는 DB에 접속을 할수 있어야 합니다. 이때 사용하는 메소드는 connect() 입니다. $dbh = DBI->connect('DBI:db_driver:db_name', 'user', 'pass') || die $DBI::errstr; 위와같은 형식으로 사용하게 됩니다. # Mssql 사용시 $dbh = DBI->connect('DBI:ODBC:db_name', 'sa', '') || die $DBI::errstr; # mSql 사용시 $dbh = DBI->connect('DBI:mSQL:db_name', 'user', 'pass') || die $DBI::errstr; 사용예) use DBI; $driver = "mSQL"; $dsn = "DBI:$driver:database=$database;host=$hostname"; $dbh = DBI->connect($dsn, undef, undef); or $driver = "mysql"; $dsn = "DBI:$driver:database=$database;host=$hostname;port=$port"; $dbh = DBI->connect($dsn, $user, $password);
do(), prepare(), execute()접속이 되었구... 그러면 DB로 쿼리를 보내야져. 이때 사용하는 메소드가 prepare(), execute(), do() 메소드 입니다.
do() 메소드$query = "insert into db (idx, name) values (1, 'unicorn')"; $dbh->do($query); 이렇게 하시면 됩니다. 쉽죠?
perpare(), execute() 메소드
그럼 예를 보겠습니다. $sth = $dbh->prepare(q {insert into db (idx, name) values (1, 'unicorn')} ); $sth->execute(); 위와 같이 하시면 됩니다. 하지만 이 두 메소드는 '?' 를 사용할수 있습니다. 설명보다는 예를 보시는것이 이해 하기 쉬우실 겁니다. $idx = $input{'idx'}; $name = $input{'name'}; $sth = $dbh->prepare(q {insert into db (idx, name) values (?, ?)} ); $sth->execute($idx, $name); 위 소스만 보시더라도 '?'가 어떤 경우에 쓰이는지 아실수 있으실 겁니다. 그리고 q{} 는 홀따옴표를 넣어주는 펄의 함수입니다. 위의
fetchrow_array접속도 하고, 쿼리도 보내고 했습니다. 그런데, 입력을 하거나 업데이트를 하는건 상관없지만, select 쿼리를 써서 DB의 내용을 불러냈다면, 그 값을 사용할수 있어야 합니다. select 으로 불러진 값들을 저장하고 있는 곳이 fetchrow_array 입니다. 다음은 사용예 입니다. $dbh = DBI->connect("dbi:DriverName:db_name", $user, $password); # DB 접속 $sth = $dbh->prepare( q{ SELECT idx, name FROM db }); # 쿼리 준비 $sth->execute; # 쿼리 실행 while (($idx, $name) = $sth->fetchrow_array) { # fetchrow_array 에 있는 값을 불러옴 print "$idx: $name\n"; } 위의 예처럼 사용하시면 됩니다.
finish, disconnect
finish여러번의 $sth = $dbh->prepare(q {insert into db (idx, name) values (?, ?)} ); $sth->execute($idx, $name); $sth->finish; $sth = $dbh->prepare(q {select idx, name from db} ); $sth->execute; $sth->finish; 여러번의 쿼리를 전송할경우 반드시 finish 를 하신다음에 하셔야 합니다.
disconnect접속되었던 DB와의 연결을 끊습니다. $dbh = DBI->connect("dbi:DriverName:db_name", $user, $password); ..... $dbh->disconnect; 위의 예와 같이 사용합니다.
errstrerrstr 메소드는 DB와의 통신중에 발생하는 에러 메세지를 담고 있습니다. $dbh = DBI->connect("dbi:DriverName:db_name", $user, $password) || die print "DBI::errstr\n"; $sth = $dbh->prepare(....) || die print "DBI::errstr\n"; $sth->execute || die print "DBI::errstr\n"; errstr 메소드를 적절히 사용하면, 어디서, 왜 에러가 나는지를 알수 있습니다. 유용하게 쓰입니다.
NOTES또한 여러개의 DBD 모듈을 설치하시면, 여러개의 DB에 동시에 접근할 수 있습니다. 이 외에도 많은 메소드가 존재하지만, 꼭 필요한 것만 알아보았습니다. 더 자세히 알고싶은 분은 DBI.html을 보시면 됩니다. 이번엔 Perl 에서 DB를 사용할수 있는 준비 과정이었습니다. 다음부턴 실제로 Perl 과 DB를 이용해서 프로그램을 작성해 보도록 하겠습니다. |
http://perl.sshel.com/?m=docs&p=/docs/database/perldb1.html#Linux_