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

Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMMudasir Qazi
 
Building Layouts with CSS
Building Layouts with CSSBuilding Layouts with CSS
Building Layouts with CSSBoris Paillard
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
JDBC Java Database Connectivity
JDBC Java Database ConnectivityJDBC Java Database Connectivity
JDBC Java Database ConnectivityRanjan Kumar
 
Chp1- Introduction aux eServices
Chp1- Introduction aux eServicesChp1- Introduction aux eServices
Chp1- Introduction aux eServicesLilia Sfaxi
 
Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework LaravelHoucem Hedhly
 
Les web services
Les web servicesLes web services
Les web servicesdihiaselma
 

What's hot (20)

Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVM
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Building Layouts with CSS
Building Layouts with CSSBuilding Layouts with CSS
Building Layouts with CSS
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
JDBC Java Database Connectivity
JDBC Java Database ConnectivityJDBC Java Database Connectivity
JDBC Java Database Connectivity
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Cours php
Cours php Cours php
Cours php
 
Chp1- Introduction aux eServices
Chp1- Introduction aux eServicesChp1- Introduction aux eServices
Chp1- Introduction aux eServices
 
7 rest
7 rest7 rest
7 rest
 
Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework Laravel
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Les web services
Les web servicesLes web services
Les web services
 

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
 
제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의 새로운 것들!
 
제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)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
Spring portfolio2
Spring portfolio2Spring portfolio2
Spring portfolio2
 

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 과의 연동은.. 반드시!!