Accessing RDMBS Using Twisted
- Development/Python
- 2008. 10. 15.
Twsited Matrix Framework 상에서 DB에 접속하려면,
해당 DB의 python 모듈이 설치되어 있어야 한다.
예) mysql용 : mySQl for python 모듈 (sourceforge.net에서 다운받는다)
1. 필요한 라이브러리 import
2. DB에 접속하기
의 형식으로 기록한다.
따라서, 다음의 두 방법과 같이 접속 정보를 기록할 수 있다.
1) 방법 #1
2) 방법 #2
3. 일반 query 실행시키기
위와 같이 하면, SELECT문이 asynchrous하게 실행되고, 결과가 도착하면 printResult 한다.
4. Callable 객체를 실행시키기 (함수, transaction)
이와 같이 하면, _get10()을 수행한 결과가 리턴된다.
5. 리턴값 형식 확인
리턴값이 result[0][0]의 형식으로 되는 이유는, 테이블이기 때문이다.
즉, 온전한 데이터는 x * y의 형태이다.
Q) 자동으로 commit이 된다던데, 명시적으로 commit하거나 roll back 하는 함수도 있는지 찾아봐야겠다
해당 DB의 python 모듈이 설치되어 있어야 한다.
예) mysql용 : mySQl for python 모듈 (sourceforge.net에서 다운받는다)
1. 필요한 라이브러리 import
from twisted.enterprise import adbapi from twisted.internet import reactor |
2. DB에 접속하기
dbpool = adbapi.ConnectionPool('dbmodule', 'mydb', 'id', 'password') |
따라서, 다음의 두 방법과 같이 접속 정보를 기록할 수 있다.
1) 방법 #1
dbpool = adbapi.ConnectionPool('MySQLdb', db='test', user='me', passwd = '1234') |
2) 방법 #2
DB_DRIVER = 'MySQLdb' DB_ARGS = { 'host' : 'localhost', 'db' : 'test', 'user': 'me', 'passwd' : '1234', } dbpool = adbapi.Connectionpool(DB_DRIVER, **DB_ARGS) |
3. 일반 query 실행시키기
def getCount(): return dbpool.runQuery("SELECT * FROM log") def printResult(l): if l: print l[0][0], 'records' getCount().addCallback(printResult) |
4. Callable 객체를 실행시키기 (함수, transaction)
def _get10(txn): txn.execute(..do something..) txn.execute("SELECT * FROM log limit 10") result = txn.fetchall() if result: return result[0][0] else: return None def get10(): return dbpool.runInteraction(_get10) def print10(data): if data != None: print data, 'data found' else: print 'no such data' get10().addCallback(print10) |
이와 같이 하면, _get10()을 수행한 결과가 리턴된다.
5. 리턴값 형식 확인
리턴값이 result[0][0]의 형식으로 되는 이유는, 테이블이기 때문이다.
즉, 온전한 데이터는 x * y의 형태이다.
ㅁ len(result) = 결과값의 레코드 수 ㅁ len(result[0]) = 컬럼수 ㅁ len(result[0][0]) - 에러! 왜냐하면 2차원으로 참조하면 실질적인 데이터를 나타내기 때문이다. |
Q) 자동으로 commit이 된다던데, 명시적으로 commit하거나 roll back 하는 함수도 있는지 찾아봐야겠다
'Development > Python' 카테고리의 다른 글
queue의 push/pop 속도 비교 (0) | 2009.03.30 |
---|---|
python class의 메소드별 단위 테스트 (unittest pyUnit vs py.test) (1) | 2009.02.12 |
현재 클래스의 이름 얻기 + 현재 클래스의 메소드 얻기 (0) | 2009.02.04 |
[Twisted] adpapi - Query 실행하기/ CallBack 함수에 argument 전달하기 (0) | 2008.10.31 |
OptionParser를 활용한 commandline parsing 하기 (0) | 2008.10.02 |
어떤 구문의 소요시간을 milliseconds로 확인하려면 (0) | 2008.09.19 |
Twisted Matrix로 TCP Client 만들기 (0) | 2008.09.19 |
Twisted Matrix 로 TCP Server 만들기 (0) | 2008.09.19 |