'Ruby'에 해당되는 글 1건
- 2007/08/20 SQLite non-C API 소개 (3)
이번 글도 간략한 소개에 가까운 글이 되겠네요.
C 외의 다른 언어들의 SQLite API에 대한 내용입니다.
SQLite의 특이점은 DB 엔진 자체에 C API 외에 Tcl API가 포함되어 있다는 점인데... Tcl은 제가 잘 모르는지라 다루지 않았습니다.
왜 Tcl 지원이 기본으로 들어가게 되었는 지에 대해서는 잘 모르겠지만, C 이외에 엔진을 컨트롤 할 수 있는 좀 더 가볍고 쉬운 문법의 언어가 지원된다는 것은 개발하는 입장에서나 사용하는 측에서 꽤 편한 것은 사실입니다(Tcl이 국내에서는 거의 안 쓰이긴 하지만요).
파이어 폭스의 XUL이라든가... 대표적으로 게임업계에서는 lua를 많이 쓴다고 들었습니다. 유명한 월드 오브 워크래프트에서 사용자가 만들어 쓸 수 있는 플러그인 스크립트도 lua이지요.
어쨌든 결론은...
아래의 API들은 단순한 소개 차원이며, SQLite에서 지원하는 것이라기 보다 SQLite를 쓰는 다른 개발자들이 해당 언어에 대한 바인딩을 개발한 것이라고 생각하시기 바랍니다.
혹 '일관성이 왜 이리 없어'라든가... SQLite 개발자에게 영어로 메일을 보내서 'ruby API에 이런 기능을 넣어주세요'라는 분이 있을까봐서...ㅡㅡ
우선, 파이썬 API입니다.
코드량은 확실히 적습니다 -_- 스크립트 언어의 강점이죵...
눈여겨 보실 부분은... 커서 클래스를 그대로 Iterator로 쓸 수 있다는 점이구요. JDBC를 비롯한 기본적인 사용방식처럼 next(), fetchone()도 가능합니다.
prepare가 없다는 점이 특이하군요.
다음은 Ruby입니다.
마지막으로 펄입니다.
그래서 JDBC에서 jdbc를 import 하고 소스에서 커넥션 스트링으로 드라이버를 부르듯이 펄은 DBI 모듈만 부른 후 커넥션 스트링으로 DB와 연결하게 됩니다.
API란 건 '사용법'에 가깝죠. 그래서 API를 아는 것보다 얼마나 잘 쓰느냐가 중요합니다.
API가 복잡한 프로그램은 그만큼 쓰기가 어렵기도 하지만... 생각해 보면 좋은 제품이라도 API 디자인이 나쁘면 널리 쓰이긴 힘듭니다.
결국 프로그래밍이란 건 수많은 API를 사용해야 하는 작업이기도 하고요.
이만 잡설을 마치고... 다음엔 무거운 주제로 한 번..ㅡㅡ
C 외의 다른 언어들의 SQLite API에 대한 내용입니다.
SQLite의 특이점은 DB 엔진 자체에 C API 외에 Tcl API가 포함되어 있다는 점인데... Tcl은 제가 잘 모르는지라 다루지 않았습니다.
왜 Tcl 지원이 기본으로 들어가게 되었는 지에 대해서는 잘 모르겠지만, C 이외에 엔진을 컨트롤 할 수 있는 좀 더 가볍고 쉬운 문법의 언어가 지원된다는 것은 개발하는 입장에서나 사용하는 측에서 꽤 편한 것은 사실입니다(Tcl이 국내에서는 거의 안 쓰이긴 하지만요).
파이어 폭스의 XUL이라든가... 대표적으로 게임업계에서는 lua를 많이 쓴다고 들었습니다. 유명한 월드 오브 워크래프트에서 사용자가 만들어 쓸 수 있는 플러그인 스크립트도 lua이지요.
어쨌든 결론은...
아래의 API들은 단순한 소개 차원이며, SQLite에서 지원하는 것이라기 보다 SQLite를 쓰는 다른 개발자들이 해당 언어에 대한 바인딩을 개발한 것이라고 생각하시기 바랍니다.
혹 '일관성이 왜 이리 없어'라든가... SQLite 개발자에게 영어로 메일을 보내서 'ruby API에 이런 기능을 넣어주세요'라는 분이 있을까봐서...ㅡㅡ
우선, 파이썬 API입니다.
#!/usr/bin/python
from pysqlite2 import dbapi2 as sqlite
selectsql = "select * from testtbl where id=?"
# db connection
con = sqlite.connect("testdb")
cur = con.cursor()
for x in range(1,4):
cur.execute(selectsql, (x,))
for y in cur:
print y[0],":",y[1]
예전 C API 소개와 프로그램 수행 로직은 동일합니다.코드량은 확실히 적습니다 -_- 스크립트 언어의 강점이죵...
눈여겨 보실 부분은... 커서 클래스를 그대로 Iterator로 쓸 수 있다는 점이구요. JDBC를 비롯한 기본적인 사용방식처럼 next(), fetchone()도 가능합니다.
prepare가 없다는 점이 특이하군요.
다음은 Ruby입니다.
#!/usr/bin/ruby
require 'sqlite3'
db = SQLite3::Database.new("testdb")
stmt = db.prepare("select * from testtbl where id=?")
for x in 1..3
stmt.bind_params(x)
stmt.execute.each do |row|
print row[0],":",row[1],"\n"
end
end
파이썬만큼 간단합니다... 별로 쓸 내용이..-_-마지막으로 펄입니다.
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("dbi:SQLite:dbname=testdb","","");
my $sth = $dbh->prepare("select * from testtbl where id = ?");
my ($id, $name);
for ($i=1; $i<=3; $i++)
{
$sth->bind_param(1, $i);
$sth->execute();
$sth->bind_columns(undef, \$id, \$name);
while ($sth->fetch())
{
print "$id : $name\n";
}
}
$sth->finish();
펄의 API는 다른 언어와는 좀 다릅니다. JDBC 처럼 펄에는 DBI라는 DB 인터페이스에 대한 공통적인 모듈이 존재하기 때문에 거기에 맞춰서 만들게 됩니다.그래서 JDBC에서 jdbc를 import 하고 소스에서 커넥션 스트링으로 드라이버를 부르듯이 펄은 DBI 모듈만 부른 후 커넥션 스트링으로 DB와 연결하게 됩니다.
API란 건 '사용법'에 가깝죠. 그래서 API를 아는 것보다 얼마나 잘 쓰느냐가 중요합니다.
API가 복잡한 프로그램은 그만큼 쓰기가 어렵기도 하지만... 생각해 보면 좋은 제품이라도 API 디자인이 나쁘면 널리 쓰이긴 힘듭니다.
결국 프로그래밍이란 건 수많은 API를 사용해야 하는 작업이기도 하고요.
이만 잡설을 마치고... 다음엔 무거운 주제로 한 번..ㅡㅡ
'Programming Story > SQLite' 카테고리의 다른 글
| SQLite R-tree 지원 예정 (0) | 2008/07/22 |
|---|---|
| SQLite non-C API 소개 (3) | 2007/08/20 |
| SQLite C API 소개 (2) | 2007/08/08 |
| Thread-safe(3) : Lock in SQLite (0) | 2007/07/06 |
-
rein 2007/09/12 11:02
SQLite 파이썬 API는 파이썬의 DB공통 API를 구현한 것입니다. Cursor가 매우 쓰기 편해서 좋긴한데, SQLite가 디비 파일의 락을 잡고 돌기 때문에 Cursor를 쓰면 동시접속 처리가 곤란합니다.
그래서 커서 받자마자 바로 list로 데이터를 뽑아내거나 해야합니다. Orz-
eminency 2007/09/12 12:59
락 문제는 SQLite 자체의 구현상 어쩔 수 없어 보이네요. 파이썬 뿐만 아니라 다른 언어를 써도 마찬가지입니다.
예전에 SQLite의 Locking 관련 소스를 봤는데 동시성이 중요한 작업에는 적합치 않다는 생각이 들었습니다.
SQLite 홈페이지에도 임베디드나 웹 어플리케이션용으로 적합하며 규모가 큰 곳에는 적합치 않다고 되어 있지요.
-

이올린에 북마크하기
이올린에 추천하기
Prev
Rss Feed