3. 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 방식
20. sqlite3
20
c.total_changes
- 데이터베이스 연결 후, 수정된 행의 개수
c.interrupt()
- 현재 연결에서 현재 실행중인 sql 을 취소, 보통 다른 스레드에서 호출
sqlite3.complete_statement
- sql 문의 세미콜론 확인
22. 데이터베이스별 라이브러리
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의 버전 확인 필수.
25. 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 형태로 ()
29. MySQLdb
29
execute(), executemany()
- sqlite3 와 다르게 cursor 가 아닌 결과의 행개수를 반환
- 결과 자체는 fetchone, fetchall, fetchmany 함수로.
10
((2L, 20L, 'ash84'), (3L, 21L, 'ash84'), (4L, 22L, 'ash84'), (5L, 23L, 'ash84'), (6L,
24L, 'ash84'), (7L, 25L, 'ash84'), (8L, 26L, 'ash84'), (9L, 27L, 'ash84'), (10L, 28L,
'ash84'), (11L, 29L, 'ash84'))
30. 정리
30
PEP249, 한번쯤 읽어보자
CONNECT – CURSOR – CLOSE
SQLite 를 제외하곤 모두 라이브러리가 필요
라이브러리 확인
- 파이썬 버전 확인
- DB 지원 버전 확인
- 라이선스 확인
- 파라미터 표기법
MSSQL 과의 연동은.. 반드시!!