SlideShare a Scribd company logo
1 of 30
Download to read offline
안성현(@SH84AHN)
데이터베이스 연결 및 사용
PEP249, 데이터베이스 라이브러리 활용
1
오늘 다룰 것들.
2
PEP249
SQLite3
데이터베이스별 라이브러리
MySQLdb
파라미터 지정방식
PEP249
3
파이썬 데이터베이스 API 명세서 버전 2.0 = PEP249
- 모든 파이썬 데이터베이스 API는 기본적으로 PEP249 인터페이스를 따르도록 권장
- connect(), close(),
- commit(), rollback(), cursor()
- callproc(), execute(), fetchall() ..
- 데이터베이스 관련해서 공통적으로 사용해야할 함수들을 정의.
링크 : http://legacy.python.org/dev/peps/pep-0249/
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 질의를 수행하고 결과를 얻는데 사용하는 객체
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 을 반복실행
PEP249
6
질의 수행 - Cursor 객체
cur.fetchone()
- execute(), executemany() 함수의 결과에서 다음행을 반환(리스트, 튜플)
- 행이 없으면 None
cur.fetchmany([size])
- 결과행을 시퀀스 반환, list(tuple()), size 는 반환할 행의 수
cur.fetchall()
- 남은 결과의 모든 행의 시퀀스 반환
cur.arraysize
- fetchmany() 연상세 사용되는 기본값 정수, 내부에서 최적이라고 생각되는 값으로 설정됨.
cur.rowcount
- execute() 실행시 결과의 행의 수, -1의 경우 결과가 없다는 것.
SQL문 파라미터 지정 방식
7
qmark, numeric, named, format 등의 방식 존재, 표준은 없음.
문자열 방식
named 방식
numeric 방식
SQL문 파라미터 지정 방식
8
qmark, numeric, named, format 등의 방식 존재, 표준은 없음.
qmark 방식
format 방식
sqlite
9
sqlite
10
데이터베이스 전체를 하나의 파일로 필요한것을 모두 파일에 두는 형태
서버 필요 없고, 설정 필요 없다.
파일이기 때문에 생성해야 한다.
 Firefox의 확장기능
- SQLite Manager 를 설치
- 일종의 클라이언트 툴
sqlite3
11
 sqlite3 모듈 사용
 connect : DB 연결객체 반환
 execute : sql 실행
 cursor : DB 연결객체 반환
sqlite3 모듈 = SQLIte 데이버베이스 라이브러리
connect - cursor - close
sqlite3
12
> <sqlite3.Cursor object at 0x02555020>
> (0, u'ash84')
fetchone()
- 하나의 결과를 가져온다.
sqlite3
13
> 10000
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() - 남은 결과를 지정한 개수만큼 가져와서 보여주기
sqlite3
15
executemany() – params 만큼 해당 sql 문을 수행 하는 함수
sqlite3
16
In-memory DB
- 메모리에 데이터베이스를 임시로 만드는 형태
- 파이썬 프로세스가 실행중일때만 유지, 종료시 없어짐.
- 데이터베이스 파일 이름 대신 “:memory:” 로 쓴다.
sqlite3
17
사용자 정의 함수 생성
- create_function(‘sql에 쓸 함수명’, 파라미터 개수, 실제 함수명)
sqlite3
18
사용자 정의 집계 함수
- create_aggregate(‘sql에 쓸 함수명’, 파라미터 개수, 실제 클래스명)
두개의 함수를 구현해야 함.
- step : 파라미터를 받는 역할
- finalize : 결과를 반환하는 역할
sqlite3
19
사용하는 방식은 사용자 정의 함수와 비슷
중요한것은 클래스 형식을 맞춰주는 것.
사용자 정의 집계 함수 사용하는 부분
sqlite3
20
c.total_changes
- 데이터베이스 연결 후, 수정된 행의 개수
c.interrupt()
- 현재 연결에서 현재 실행중인 sql 을 취소, 보통 다른 스레드에서 호출
sqlite3.complete_statement
- sql 문의 세미콜론 확인
타 데이터베이스 지원
21
PEP249
SQLite
mysql
mssqloracle
postgresql
파이썬 기본 모듈
서드파티 모듈로 지원
결국 각종 ORM 라이브러리,
django, SQLAlchemy 에서도
내부적으로 서드파트 모듈을 이용해서 구현됨.
데이터베이스별 라이브러리
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 예제
23
설치
- http://sourceforge.net/projects/mysql-python/
- 위의 주소에 가서 설치파일로 설치,
- lib/site-packages/MySQLdb 에 설치됨.
MySQLdb
24
기본적으로 PEP249를 준수.
- connect – cursor – close
 그러나 조금씩 다른 부분이 있다.
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() 를 사용, 따로 만든 경우라면 지정
MySQLdb
26
다양한 cursor
 BaseCusor
- 커서 객체의 기본 클래스
 CursorStoreResultMixIn
- C 함수 mysql_store_result() 해당하는 역할
- 쿼리에 대한 결과를 서버로부터 한꺼번에 받아와서 클라이언트 메모리에 저장.
 CursorUseResultMixIn
- C 함수 mysql_use_result() 해당하는 역할
- 쿼리에 대한 결과를 서버에서 한건씩 가져온다.
 CursorTupleRowsMixIn
- 결과 row를 tuple 형태로 리턴
 CursorDictRowsMixIn
- 결과 row를 dict 형태로 리턴
MySQLdb
27
 Cursor
- 기본 커서
- CursorStoreResultMixIn + CursorTupleRowsMixIn + BaseCursor
- 결과를 튜플로 반환
 DictCursor
- Cursor 와 유사, 결과를 dict 으로 반환
 SSCursor(Server-side Cursor)
- Cursor와 유사, CursorUseResultMixIn 를 사용
- 큰 결과 데이터가 예상될때 사용
 SSDictCursor
- SSCursor 의 dict 결과 형태
MySQLdb
28
paramstyle : format
- C언어의 printf %d, %s 와 같이 사용하는 방식
- 형에 상관없이 %s 로 통일해서 사용함.
파라미터가 하나인 경우,
파라미터가 두개 이상인 경우, tuple 형태로 ()
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
PEP249, 한번쯤 읽어보자
CONNECT – CURSOR – CLOSE
SQLite 를 제외하곤 모두 라이브러리가 필요
라이브러리 확인
- 파이썬 버전 확인
- DB 지원 버전 확인
- 라이선스 확인
- 파라미터 표기법
MSSQL 과의 연동은.. 반드시!!

More Related Content

What's hot (20)

Html ppt
Html pptHtml ppt
Html ppt
 
SQL
SQLSQL
SQL
 
HTML
HTMLHTML
HTML
 
Js set timeout & setinterval
Js set timeout & setintervalJs set timeout & setinterval
Js set timeout & setinterval
 
Intro Html
Intro HtmlIntro Html
Intro Html
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
Basic Html Notes
Basic Html NotesBasic Html Notes
Basic Html Notes
 
Html
HtmlHtml
Html
 
RISC-V User level ISA
RISC-V User level ISARISC-V User level ISA
RISC-V User level ISA
 
Node.js File system & Streams
Node.js File system & StreamsNode.js File system & Streams
Node.js File system & Streams
 
Basic HTML
Basic HTMLBasic HTML
Basic HTML
 
Html Form Controls
Html Form ControlsHtml Form Controls
Html Form Controls
 
Introduction to html
Introduction to htmlIntroduction to html
Introduction to html
 
(Fast) Introduction to HTML & CSS
(Fast) Introduction to HTML & CSS (Fast) Introduction to HTML & CSS
(Fast) Introduction to HTML & CSS
 
Intro to html
Intro to htmlIntro to html
Intro to html
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
 
Htmltag.ppt
Htmltag.pptHtmltag.ppt
Htmltag.ppt
 
Accessible dynamic forms
Accessible dynamic formsAccessible dynamic forms
Accessible dynamic forms
 
Quick tour of PHP from inside
Quick tour of PHP from insideQuick tour of PHP from inside
Quick tour of PHP from inside
 

Similar to 파이썬 데이터베이스 연결 1탄

Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIjieun kim
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄SeongHyun Ahn
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancementsbeamofhope
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client문익 장
 
파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄 파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄 SeongHyun Ahn
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVCAnselmKim
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰beom kyun choi
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Similar to 파이썬 데이터베이스 연결 1탄 (20)

테스트
테스트테스트
테스트
 
SPARK SQL
SPARK SQLSPARK SQL
SPARK SQL
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
 
Mem cached
Mem cachedMem cached
Mem cached
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client
 
파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄 파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
Arcus
ArcusArcus
Arcus
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 

More from SeongHyun Ahn

MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선 MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선 SeongHyun Ahn
 
github : 유용한 기능들
github : 유용한 기능들 github : 유용한 기능들
github : 유용한 기능들 SeongHyun Ahn
 
카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스 카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스 SeongHyun Ahn
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지SeongHyun Ahn
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 SeongHyun Ahn
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리SeongHyun Ahn
 
실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARD실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARDSeongHyun Ahn
 
Pycon APAC 2016 후기
Pycon APAC 2016 후기Pycon APAC 2016 후기
Pycon APAC 2016 후기SeongHyun Ahn
 
Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606SeongHyun Ahn
 
디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴SeongHyun Ahn
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장SeongHyun Ahn
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 

More from SeongHyun Ahn (16)

MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선 MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선
 
github : 유용한 기능들
github : 유용한 기능들 github : 유용한 기능들
github : 유용한 기능들
 
카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스 카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리
 
파이썬 소개
파이썬 소개 파이썬 소개
파이썬 소개
 
실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARD실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARD
 
Pycon APAC 2016 후기
Pycon APAC 2016 후기Pycon APAC 2016 후기
Pycon APAC 2016 후기
 
Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606
 
디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 

파이썬 데이터베이스 연결 1탄

  • 1. 안성현(@SH84AHN) 데이터베이스 연결 및 사용 PEP249, 데이터베이스 라이브러리 활용 1
  • 2. 오늘 다룰 것들. 2 PEP249 SQLite3 데이터베이스별 라이브러리 MySQLdb 파라미터 지정방식
  • 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 방식
  • 10. sqlite 10 데이터베이스 전체를 하나의 파일로 필요한것을 모두 파일에 두는 형태 서버 필요 없고, 설정 필요 없다. 파일이기 때문에 생성해야 한다.  Firefox의 확장기능 - SQLite Manager 를 설치 - 일종의 클라이언트 툴
  • 11. sqlite3 11  sqlite3 모듈 사용  connect : DB 연결객체 반환  execute : sql 실행  cursor : DB 연결객체 반환 sqlite3 모듈 = SQLIte 데이버베이스 라이브러리 connect - cursor - close
  • 12. sqlite3 12 > <sqlite3.Cursor object at 0x02555020> > (0, u'ash84') fetchone() - 하나의 결과를 가져온다.
  • 14. 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() - 남은 결과를 지정한 개수만큼 가져와서 보여주기
  • 15. sqlite3 15 executemany() – params 만큼 해당 sql 문을 수행 하는 함수
  • 16. sqlite3 16 In-memory DB - 메모리에 데이터베이스를 임시로 만드는 형태 - 파이썬 프로세스가 실행중일때만 유지, 종료시 없어짐. - 데이터베이스 파일 이름 대신 “:memory:” 로 쓴다.
  • 17. sqlite3 17 사용자 정의 함수 생성 - create_function(‘sql에 쓸 함수명’, 파라미터 개수, 실제 함수명)
  • 18. sqlite3 18 사용자 정의 집계 함수 - create_aggregate(‘sql에 쓸 함수명’, 파라미터 개수, 실제 클래스명) 두개의 함수를 구현해야 함. - step : 파라미터를 받는 역할 - finalize : 결과를 반환하는 역할
  • 19. sqlite3 19 사용하는 방식은 사용자 정의 함수와 비슷 중요한것은 클래스 형식을 맞춰주는 것. 사용자 정의 집계 함수 사용하는 부분
  • 20. sqlite3 20 c.total_changes - 데이터베이스 연결 후, 수정된 행의 개수 c.interrupt() - 현재 연결에서 현재 실행중인 sql 을 취소, 보통 다른 스레드에서 호출 sqlite3.complete_statement - sql 문의 세미콜론 확인
  • 21. 타 데이터베이스 지원 21 PEP249 SQLite mysql mssqloracle postgresql 파이썬 기본 모듈 서드파티 모듈로 지원 결국 각종 ORM 라이브러리, django, SQLAlchemy 에서도 내부적으로 서드파트 모듈을 이용해서 구현됨.
  • 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의 버전 확인 필수.
  • 23. MySQLdb 예제 23 설치 - http://sourceforge.net/projects/mysql-python/ - 위의 주소에 가서 설치파일로 설치, - lib/site-packages/MySQLdb 에 설치됨.
  • 24. MySQLdb 24 기본적으로 PEP249를 준수. - connect – cursor – close  그러나 조금씩 다른 부분이 있다.
  • 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 과의 연동은.. 반드시!!