PEP249
3
파이썬 데이터베이스 API명세서 버전 2.0 = PEP249
- 모든 파이썬 데이터베이스 API는 기본적으로 PEP249 인터페이스를 따르도록 권장
- connect(), close(),
- commit(), rollback(), cursor()
- callproc(), execute(), fetchall() ..
- 데이터베이스 관련해서 공통적으로 사용해야할 함수들을 정의.
링크 : http://legacy.python.org/dev/peps/pep-0249/
4.
PEP249
4
연결 - Connection객체
c = connect(params) 함수 제공
- params : dsn, user, password, host, database 등의 정보
- return : Connection 객체
c.close()
- 서버와의 연결 닫기
c.commit()
- 모든 트랜잭션을 디비에 커밋. 수정한 내용 반영(트랜잭션 지원 DB 에 한함.)
c.rollback()
- 트랜잭션의 시작지점으로 돌리기.
cur = c.cursor()
- Connect() 함수의 연결을 사용하는 새로운 Cursor 객체 만든다.
- 커서(Cursor)는 sql 질의를 수행하고 결과를 얻는데 사용하는 객체
5.
PEP249
5
질의 수행 -Cursor 객체
cur.callproc(procname [, parameters])
- 저장프로시저 호출
- procname : 저장프로시저 이름
cur.close()
- 커서를 닫아서 연산수행 x
cur.execute(query [, parameters])
- sql 실행, query : sql, paramters : sql 문자열에 있는 변수의 할당값.
cur.executemany(query [, paramtersequence])
- sql 을 반복실행
6.
PEP249
6
질의 수행 -Cursor 객체
cur.fetchone()
- execute(), executemany() 함수의 결과에서 다음행을 반환(리스트, 튜플)
- 행이 없으면 None
cur.fetchmany([size])
- 결과행을 시퀀스 반환, list(tuple()), size 는 반환할 행의 수
cur.fetchall()
- 남은 결과의 모든 행의 시퀀스 반환
cur.arraysize
- fetchmany() 연상세 사용되는 기본값 정수, 내부에서 최적이라고 생각되는 값으로 설정됨.
cur.rowcount
- execute() 실행시 결과의 행의 수, -1의 경우 결과가 없다는 것.
7.
SQL문 파라미터 지정방식
7
qmark, numeric, named, format 등의 방식 존재, 표준은 없음.
문자열 방식
named 방식
numeric 방식
8.
SQL문 파라미터 지정방식
8
qmark, numeric, named, format 등의 방식 존재, 표준은 없음.
qmark 방식
format 방식
데이터베이스별 라이브러리
22
DB 라이브러리명 링크 설치
mssql pymssql http://pymssql.org/en/latest/
https://code.google.com/p/pymssql/wiki/
Documentation(한국어번역)
Pip install pymssql
Postgresql psycopg http://initd.org/psycopg pip install psycopg2
mysql MySQLdb http://sourceforge.net/projects/mysql-pyt
hon/
링크에서 받아서 setup.py 설치
Oracle cx-oracle http://cx-oracle.readthedocs.org/en/latest
/index.html
Pip install cx-oracle
https://wiki.python.org/moin/DatabaseInterfaces
각 라이브러리가 지원하는 DB의 버전 확인 필수.
MySQLdb
25
connect 함수의파라미터들
- host, port, db, user, passwd, unix_socket
- compress : 프로토콜 압축여부 설정
- init_command : 시작하자마다 수행할 명령어
- use_unicode
: True 로 지정시 CHAR, VARCHAR, TEXT 컬럼의 경우 해당 데이터들을 유니코드로 반환한다.
- charset : MySQL4.1 이후부터 변경 가능, 이 옵션은 use_unicode=True 를 내포하고 있음.
- cursorclass : cursor() 를 사용, 따로 만든 경우라면 지정
26.
MySQLdb
26
다양한 cursor
BaseCusor
-커서 객체의 기본 클래스
CursorStoreResultMixIn
- C 함수 mysql_store_result() 해당하는 역할
- 쿼리에 대한 결과를 서버로부터 한꺼번에 받아와서 클라이언트 메모리에 저장.
CursorUseResultMixIn
- C 함수 mysql_use_result() 해당하는 역할
- 쿼리에 대한 결과를 서버에서 한건씩 가져온다.
CursorTupleRowsMixIn
- 결과 row를 tuple 형태로 리턴
CursorDictRowsMixIn
- 결과 row를 dict 형태로 리턴
27.
MySQLdb
27
Cursor
- 기본커서
- CursorStoreResultMixIn + CursorTupleRowsMixIn + BaseCursor
- 결과를 튜플로 반환
DictCursor
- Cursor 와 유사, 결과를 dict 으로 반환
SSCursor(Server-side Cursor)
- Cursor와 유사, CursorUseResultMixIn 를 사용
- 큰 결과 데이터가 예상될때 사용
SSDictCursor
- SSCursor 의 dict 결과 형태
28.
MySQLdb
28
paramstyle : format
-C언어의 printf %d, %s 와 같이 사용하는 방식
- 형에 상관없이 %s 로 통일해서 사용함.
파라미터가 하나인 경우,
파라미터가 두개 이상인 경우, tuple 형태로 ()