MySQLmodule-1.4 설치/사용법
이강성 2001.1.19
1년여전에 MySQLmodule의 설치 문서를 번역했는데, 많은 사용자들이 불편함을 격는 것 같아서, 간단한 설치법과 사용법을 다시 정리한다.
--------------------------------------------------------------------------------
컴파일과 설치
다운로드 : MySQLmodule-1.4.tar.gz 를 다운받고, 압축을 푼다.
다음 세가지 경우 중에 한가지로 컴파일한다. (3번을 추천한다)
MS 윈도우 시스템에 설치하려면, README.NT을 읽는다.
파이썬 자체에 이 모듈을 포함시키는 법.
MySQLmodule.c 를 Python 소스의 Modules 디렉토리에 복사한다.
그 디렉토리의 Setup 화일에 다음의 행을 추가한다. (mysql 경로가 다를 수 있다.)
MySQL MySQLmodule.c -L/usr/local/lib/mysql/ -lmysqlclient \r
-I/usr/local/include/mysql
MySQL 라이브러리와 인클루드 디렉토리는 시스템에 따라 다를 수 있음에 주의하라. 공용 모듈로 만들고 싶다면 Setup 화일의 *shared* 아래에 삽입하라.
Python을 컴파일한 적이 있으면 Python 디렉토리에서 make를 수행시킨다. 그렇지 않으면, compile/install 의 지시내용을 따라라.
동적으로 적재가능한 모듈을 만드는 법(권장 방법)
파이썬 1.5.2에서 컴파일 예: (여러분 시스템에 따라서 경로의 조정이 필요할지도 모른다.)
gcc -shared -I/usr/include/python1.5 -I/usr/local/include/mysql MySQLmodule.c -L/usr/local/lib/mysql -lmysqlclient -L/usr/lib/python1.5/config -lpython1.5 -o MySQLmodule.so
파이썬 2.0에서 컴파일 예:
gcc -shared -I/usr/local/include/python2.0 -I/usr/local/include/mysql MySQLmodule.c -L/usr/local/lib/mysql -lmysqlclient -L/usr/local/lib/python2.0/config -lpython2.0 -o MySQLmodule.so
만들어진 MySQLmodule.so를 PYTHONPATH 중의 한 디렉토리로 이동한다. 예를 들면 다음과 같다:
cp MySQLmodule.so /usr/lib/python1.5/lib-dynload/ # 1.5용
cp MySQLmodule.so /usr/local/lib/python2.0/lib-dynload/ # 2.0용
* 만일 컴파일 도중 다음과 같은 에러가 발생하면 http://www.python.or.kr:8080/python/DB/mysql/MySQLmodule.c 파일로 다시 시도해 본다.
MySQLmodule.c: In function `pythonify_row\:
MySQLmodule.c:238: warning: assignment from incompatible pointer type
MySQLmodule.c: In function `pythonify_res_fields\:
MySQLmodule.c:384: invalid lvalue in unary `&\
MySQLmodule.c: In function `STH_fetchdict\:
MySQLmodule.c:1125: invalid lvalue in unary `&\
MySQLmodule.c:1147: invalid lvalue in unary `&\
--------------------------------------------------------------------------------
데이터베이스 연결하기
>>> import MySQL
>>> DBH = MySQL.connect(\localhost\, \userid\, \password\)
>>> DBH.selectdb(\test\)
질의(SQL) 하기
>>> STH = DBH.query(\select * from pet\)
질의(SQL) 결과에 대한 정보 얻기
>>> STH.numrows() # 레코드 수
9
>>> STH.numfields() # 필드 수
6
>>> STH.fields() # 필드 정보 얻기
[[\name\, \pet\, \varchar\, 20, \], [\owner\, \pet\, \varchar\, 20, \], [\spec
ies\, \pet\, \varchar\, 20, \], [\sex\, \pet\, \string\, 1, \], [\birth\, \pet
\, \date\, 10, \], [\death\, \pet\, \date\, 10, \]]
질의(SQL) 결과 얻기 (리스트 형식)
>>> recs = STH.fetchrows() # 검색된 전체 레코드 읽음. 리스트의 리스트 형
>>> for rec in recs: # 출력
... print rec
...
[\Fluffy\, \Harold\, \cat\, \f\, \1993-02-04\, None]
[\Claws\, \Gwen\, \cat\, \m\, \1994-03-17\, None]
[\Buffy\, \Harold\, \dog\, \f\, \1989-05-13\, None]
[\Fang\, \Benny\, \dog\, \m\, \1990-08-27\, None]
[\Bowser\, \Diane\, \dog\, \m\, \1989-08-31\, \1995-07-29\]
[\Chirpy\, \Gwen\, \bird\, \f\, \1998-09-11\, None]
[\Whistler\, \Gwen\, \bird\, None, \1997-12-09\, None]
[\Slim\, \Benny\, \snake\, \m\, \1996-04-29\, None]
[\Puffball\, \Diane\, \hamster\, \f\, \1999-03-30\, None]
>>> recs = STH.fetchrows(2) # 원하는 만큼의 결과를 순차적으로 얻을 수도 있다.
질의(SQL) 결과 얻기 (사전 형식)
사전 형식으로 레코드를 받아서 처리하면 위치 정보를 모르고 이름으로 필드에 접근 가능하므로 매우 편리하다.
>>> STH = DBH.query(\select * from pet\)
>>> rec = STH.fetchdict(1) # 사전 형식으로 레코드를 받음.
>>> rec
[{\pet.death\: None, \pet.owner\: \Harold\, \pet.sex\: \f\, \pet.birth\: \1993-0
2-04\, \pet.name\: \Fluffy\, \pet.species\: \cat\}]
>>> recs = STH.fetchdict() # 남은 전체 레코드 읽음
>>> for rec in recs:
... print rec[\pet.name\], rec[\pet.birth\]
...
Fluffy 1993-02-04
Claws 1994-03-17
Buffy 1989-05-13
Fang 1990-08-27
Bowser 1989-08-31
Chirpy 1998-09-11
Whistler 1997-12-09
Slim 1996-04-29
Puffball 1999-03-30
>>>
테이블 생성하고 레코드 삽입하고, DB만들고..
이 기능은 특별하지 않다. 다음과 같이 데이터 객체에 명령만 문자열로 넘겨주면 된다.
DBH[\create table pytest (x int, y int, s char(20))\]
DBH[\insert into pytest values (1,2,\abc\)\]
DBH[\drop table pytest\]
이강성 2001년 1월 19일
|