#SQLite3란
- 오프라인, 응용프로그램에 넣어 사용하는 경량 임베디드 데이터베이스
- 라이브러리 호출, 데이터 저장 시 하나의 파일만 사용
- 안드로이드 SDK에도 내장
#SQLite3 장점
- 작은 크기&간결함 → 간단한 DB 구성 가능
- 크로스플랫폼, 트랜잭션 지원
* 크로스플랫폼(=멀티플랫폼)
- 컴퓨터 프로그램, 운영체제, 컴퓨터 언어, 프로그래밍 언어, 컴퓨터 소프트웨어 등 여러 종류 플랫폼에서 사용 가능을 의미
- 오픈소스 프로젝트
- 네트워크 구성 필요 없다(서버 포함)
#SQLite3 단점
- 호스트 프로그램이 DB처리에 대한 모든 부하 부담(DB엔진 자체가 호스트 프로그램에 임베디드 되기 때문)
#파이썬에서 SQLite3
- pysqlite 모듈을 통해서 사용
- 기본 포함, 별도의 모듈 설치 안하고 바로 사용 가능
※pysqlite 모듈에 정의된 함수&클래스
주요 메소드 |
설명 |
connect(database[, timeout, isolation_level, detect_types, factory]) |
SQLite3 DB에 연결, 연결된 Connection객체 리턴 |
complete_statement(sql) |
세미콜론으로 끝나는 SQL문장에 대해 True 리턴 |
register_adapter(type, callable) |
사용자정의 파이썬 자료형, SQLite3에 등록 callable: 변환을 수행하는 함수, 1개의 인자를 받아서 파이썬에서 처리 가능한 자료형 리턴 |
register_converter(typename, callable) |
SQLite3에 저장된 자료를 사용자정의 자료형으로 변환하는 함수 등록 typename은 SQLite3에서 내부적으로 사용될 자료형의 이름 |
※Connection 클래스 함수&클래스
※Cursor 클래스 함수&클래스
- 데이터베이스에 저장된 파일에 연산을 수행하기 위함
- SQL문장 수행, 조회된 결과 가지고 오는 역할
#sqlite_test.py(데이터연동순서) | |
| import sqlite3 | |
| db_fileName='Book.db' | |
| conn = sqlite3.connect(db_fileName) | |
| print(conn) | |
| cur = conn.cursor() #커서객체 | |
| #cur.execute('drop table Book') | |
| #cur.execute('create table Book(no integer, title text)') | |
| datas=[(1,'python'),(2,'java'),(3,'spring')] | |
| #cur.executemany('insert into Book values(?,?)', datas) | |
| #print('입력한 데이터 갯수: ',cur.rowcount) | |
| # conn.commit() | |
| cur.execute('select no,title from Book') | |
| for row in cur: | |
| print(row) | |
| conn.close() |
| #sql_test.py #(DB연결, 테이블생성, 데이터추가, 데이터조회) | |
| import sqlite3 | |
| db = sqlite3.connect("Book.db") #DB 연결 | |
| cur = db.cursor() #커서객체 생성 | |
| cur.execute('drop table if exists Book') | |
| a=cur.execute('create table Book(no integer, title text)') #테이블생성 | |
| b=cur.executemany('insert into Book values(?,?)', [(1,"파이썬")]) | |
| print('입력한 데이터 갯수: ', cur.rowcount) | |
| #c=cur.executemany('insert into Book values(2,"JAVA")', []) # insert 안 | |
| #cur.execute('sql문') | |
| #cur.executemany('sql문',열거가능한 데이터) | |
| c=cur.execute('insert into Book values(2,"JAVA")') | |
| d=cur.execute('insert into Book values(3,"SQL")') | |
| e=cur.executemany('insert into Book values(?,?)', [(4,"MyBatis"),(5,"AndroidStudio")]) | |
| print('입력한 데이터 갯수: ', cur.rowcount) #실행된 행의 개수 | |
| print(a) | |
| print(b) | |
| #print(c) | |
| #데이터 조회 | |
| print('[데이터 조회1]') | |
| cur.execute('select no,title from book') | |
| for row in cur: | |
| print(row) | |
| print('[데이터 조회2]') | |
| cur.execute('select * from book') | |
| for row2 in cur: | |
| print(row2[0], row2[1]) #컬럼 인덱스를 명시 | |
print('타입체크:', type((1,2,3))) | |
| print('타입체크:', type((1))) | |
| print('타입체크:', type(('abc'))) | |
| print('타입체크:', type((1,))) | |
| #title없는 no만 6~10까지 입력 | |
| #for i in range(6,11): | |
| # cur.executemany('insert into Book(no) values(?)',[(i,)]) | |
| cur.execute('select * from book') | |
| for row3 in cur: | |
| print(row3[0]) | |
| db.commit() | |
| db.close() |
| #sql_test3.py | |
| import sqlite3 | |
| #DB수정 | |
| db = sqlite3.connect('book.db') | |
| cursor = db.cursor() | |
| cursor.execute('update book set title="Python3"') | |
| print('커서 카운트:',cursor.rowcount) | |
| #전달인자가 없다면 execute(), 있다면 executemany() | |
| cursor.execute('select * from book') | |
| print('커서 카운트:',cursor.rowcount) | |
| #조회된 결과 모두를 리스트형태로 반환 | |
| print(cursor.fetchall()) | |
| cursor.close() | |
| db.commit() | |
db.close() |
| #sql_test4.py | |
| #정렬된 조회, dump파일 만들기 | |
| import sqlite3 | |
| con = sqlite3.connect('book.db') | |
| cur = con.cursor() | |
| #정렬 조건을 표현하는 함수정의 | |
| def myFunc(str1, str2): | |
| s1=str1.upper() #전체 대문자 변환 | |
| s2=str2.upper() | |
| #return (s1>s2) - (s1<s2) #오름차순정렬 | |
| return (s1<s2) - (s1>s2) #내림차순 정렬 | |
| # s1='python' s2='abc' : True - False 1-0 = 1 (True) | |
| # s1='abc' s2='python' : False - True 0-1 = -1 | |
| con.create_collation('myordering', myFunc) #명시적인 별칭과 핸들러(myFunc) 대입 | |
| cur.execute('select title from book order by title COLLATE myordering') | |
| for r in cur: | |
| print(r[0]) | |
| print('=================') | |
| for l in con.iterdump(): #실행된 쿼리구문을 덤프로 만들어 출력 | |
| print(l) | |
| print('=================') | |
| with open('dump.sql','w', encoding='utf-8') as f: | |
| for l2 in con.iterdump(): #실행된 쿼리구문을 덤프로 만들어 출력 | |
| f.write('{0}\n'.format(l2)) #문자열 안에 { }를 넣고 인덱스 지정, format에는 { }부분에 넣을 값 지정 |
| #sql_test5.py #(Mydb생성, test테이블 생성, 데이터를 입력(인덱스, 콜론 통한)) | |
| import sqlite3 | |
| db = sqlite3.connect("Mydb.db") | |
| cur = db.cursor() | |
| cur.execute('drop table if exists test') | |
| sql_cmd = 'create table test (id integer, name text)' | |
| cur.execute(sql_cmd) | |
| #execute 통한 입력 | |
| sql_cmd = 'insert into test values(?,?)' | |
| cur.execute(sql_cmd,(1,'길라임라임')) | |
| cur.execute(sql_cmd,(2,'홍길동길동')) | |
| for row in cur.execute('select * from test'): | |
| print(row) | |
| print('=====================================') | |
| #콜론을 통한 입력 | |
| sql_cmd2 = 'insert into test values(:id,:name)' | |
| cur.execute(sql_cmd2, {'id':3, 'name':'김주원'}) | |
| cur.execute(sql_cmd2, {'id':4, 'name':'김유신'}) | |
| #cur.execute(sql_cmd2,(0,'gildong')) | |
| #cur.execute(sql_cmd2,(1,'홍길동길동')) | |
| for row2 in cur.execute('select * from test'): | |
| print(row2) | |
| print('======================') | |
| cur.execute('drop table if exists test2') | |
| cur.execute('create table test2 (no integer)') | |
| cur.execute('insert into test2 values (11)') | |
| cur.execute('insert into test2 (no) values (22)') | |
| for row in cur.execute('select no from test2'): | |
| print(row[0]) |
'Python' 카테고리의 다른 글
| 파이썬 증권 데이터 분석을 활용한 자동매매 프로그램 만들기 #1 계획 (0) | 2021.01.12 |
|---|---|
| Python 예제를 통해 알아보는 CSV (0) | 2018.10.12 |