Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Study 5- Database

Python Study 5- Database

AhnSeongHyun

May 18, 2015
Tweet

More Decks by AhnSeongHyun

Other Decks in Programming

Transcript

  1. PEP249 3 파이썬 데이터베이스 API 명세서 버전 2.0 = PEP249

    - 모든 파이썬 데이터베이스 API는 기본적으로 PEP249 인터페이스를 따르도록 권장 - connect(), close(), - commit(), rollback(), cursor() - callproc(), execute(), fetchall() .. - 데이터베이스 관련해서 공통적으로 사용해야할 함수들을 정의. 링크 : http://legacy.python.org/dev/peps/pep-0249/
  2. 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 질의를 수행하고 결과를 얻는데 사용하는 객체
  3. 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 을 반복실행
  4. PEP249 6 질의 수행 - Cursor 객체 cur.fetchone() - execute(),

    executemany() 함수의 결과에서 다음행을 반환(리스트, 튜플) - 행이 없으면 None cur.fetchmany([size]) - 결과행을 시퀀스 반환, list(tuple()), size 는 반환할 행의 수 cur.fetchall() - 남은 결과의 모든 행의 시퀀스 반환 cur.arraysize - fetchmany() 연상세 사용되는 기본값 정수, 내부에서 최적이라고 생각되는 값으로 설정됨. cur.rowcount - execute() 실행시 결과의 행의 수, -1의 경우 결과가 없다는 것.
  5. SQL문 파라미터 지정 방식 7 qmark, numeric, named, format 등의

    방식 존재, 표준은 없음. 문자열 방식 named 방식 numeric 방식
  6. SQL문 파라미터 지정 방식 8 qmark, numeric, named, format 등의

    방식 존재, 표준은 없음. qmark 방식 format 방식
  7. sqlite 10 데이터베이스 전체를 하나의 파일로 필요한것을 모두 파일에 두는

    형태 서버 필요 없고, 설정 필요 없다. 파일이기 때문에 생성해야 한다.  Firefox의 확장기능 - SQLite Manager 를 설치 - 일종의 클라이언트 툴
  8. sqlite3 11  sqlite3 모듈 사용  connect : DB

    연결객체 반환  execute : sql 실행  cursor : DB 연결객체 반환 sqlite3 모듈 = SQLIte 데이버베이스 라이브러리 connect - cursor - close
  9. sqlite3 12 > <sqlite3.Cursor object at 0x02555020> > (0, u'ash84')

    fetchone() - 하나의 결과를 가져온다.
  10. sqlite3 14 1 [(1, u'ash84'), (2, u'ash84'), (3, u'ash84'), (4,

    u'ash84'), (5, u'ash84'), (6, u'ash84'), (7, u'ash84'), (8, u'ash84'), (9, u'ash84'), (10, u'ash84')] 1 [(12, u'ash84'), (13, u'ash84'), (14, u'ash84'), (15, u'ash84'), (16, u'ash84'), (17, u'ash84'), (18, u'ash84'), (19, u'ash84'), (20, u'ash84'), (21, u'ash84')] fetchmany() - 남은 결과를 지정한 개수만큼 가져와서 보여주기
  11. sqlite3 16 In-memory DB - 메모리에 데이터베이스를 임시로 만드는 형태

    - 파이썬 프로세스가 실행중일때만 유지, 종료시 없어짐. - 데이터베이스 파일 이름 대신 “:memory:” 로 쓴다.
  12. sqlite3 18 사용자 정의 집계 함수 - create_aggregate(‘sql에 쓸 함수명’,

    파라미터 개수, 실제 클래스명) 두개의 함수를 구현해야 함. - step : 파라미터를 받는 역할 - finalize : 결과를 반환하는 역할
  13. sqlite3 19 사용하는 방식은 사용자 정의 함수와 비슷 중요한것은 클래스

    형식을 맞춰주는 것. 사용자 정의 집계 함수 사용하는 부분
  14. sqlite3 20 c.total_changes - 데이터베이스 연결 후, 수정된 행의 개수

    c.interrupt() - 현재 연결에서 현재 실행중인 sql 을 취소, 보통 다른 스레드에서 호출 sqlite3.complete_statement - sql 문의 세미콜론 확인
  15. 타 데이터베이스 지원 21 PEP249 SQLite mysql mssql oracle postgresql

    파이썬 기본 모듈 서드파티 모듈로 지원 결국 각종 ORM 라이브러리, django, SQLAlchemy 에서도 내부적으로 서드파트 모듈을 이용해서 구현됨.
  16. 데이터베이스별 라이브러리 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의 버전 확인 필수.
  17. MySQLdb 예제 23 설치 - http://sourceforge.net/projects/mysql-python/ - 위의 주소에 가서

    설치파일로 설치, - lib/site-packages/MySQLdb 에 설치됨.
  18. MySQLdb 24 기본적으로 PEP249를 준수. - connect – cursor –

    close  그러나 조금씩 다른 부분이 있다.
  19. 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() 를 사용, 따로 만든 경우라면 지정
  20. MySQLdb 26 다양한 cursor  BaseCusor - 커서 객체의 기본

    클래스  CursorStoreResultMixIn - C 함수 mysql_store_result() 해당하는 역할 - 쿼리에 대한 결과를 서버로부터 한꺼번에 받아와서 클라이언트 메모리에 저장.  CursorUseResultMixIn - C 함수 mysql_use_result() 해당하는 역할 - 쿼리에 대한 결과를 서버에서 한건씩 가져온다.  CursorTupleRowsMixIn - 결과 row를 tuple 형태로 리턴  CursorDictRowsMixIn - 결과 row를 dict 형태로 리턴
  21. MySQLdb 27  Cursor - 기본 커서 - CursorStoreResultMixIn +

    CursorTupleRowsMixIn + BaseCursor - 결과를 튜플로 반환  DictCursor - Cursor 와 유사, 결과를 dict 으로 반환  SSCursor(Server-side Cursor) - Cursor와 유사, CursorUseResultMixIn 를 사용 - 큰 결과 데이터가 예상될때 사용  SSDictCursor - SSCursor 의 dict 결과 형태
  22. MySQLdb 28 paramstyle : format - C언어의 printf %d, %s

    와 같이 사용하는 방식 - 형에 상관없이 %s 로 통일해서 사용함. 파라미터가 하나인 경우, 파라미터가 두개 이상인 경우, tuple 형태로 ()
  23. 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'))
  24. 정리 30 PEP249, 한번쯤 읽어보자 CONNECT – CURSOR – CLOSE

    SQLite 를 제외하곤 모두 라이브러리가 필요 라이브러리 확인 - 파이썬 버전 확인 - DB 지원 버전 확인 - 라이선스 확인 - 파라미터 표기법 MSSQL 과의 연동은.. 반드시!!