[요약] 파이썬(Python) SQLite - 테이블조회
SQLite 패키지를 이용하여데이터를 조회할 수 있다.
한개 ROW : cursor.fetchone
모든 ROWs : cursor.fetchall
지정범위 ROWs : cursor.fetchmany(size=3)
SQL Where 조건 파라미터 방식을 위하여
튜플(Tuple), 변수(Variable)/상수, 딕셔너리(Dictionary)를 사용할 수 있다
cursor.execute('SELECT * FROM users WHERE id=?', (3,))
cursor.execute('SELECT * FROM users WHERE id in (?,?)', (3,5))
cursor.execute('SELECT * FROM users WHERE id="%s"' % 3)
cursor.execute('SELECT * FROM users WHERE id in (%d,%d)' % (3,4))
cursor.execute('SELECT * FROM users WHERE id=:Id', {"Id":5})
cursor.execute('SELECT * FROM users WHERE id=:Id or id=:Id2', {"Id":2, "Id2":5})
DB를 Dump 시킬 수 있다.
# Dump 출력(with문을 사용하면 with문 종료시점에서 close가 자동 호출됨을 유의)
with conn:
with open('D:/Python_Basic/Resource/dump.sql', 'w') as f:
for line in conn.iterdump():
f.write('%s\n' % line)
print('Dump Print Complete')
사용사례)
# 파이썬 데이터베이스 연동 2 # 파이썬 데이터베이스 테이블 조회(read / dump) import sqlite3 # 기본 패키지로 포함되어 있음 # DB파일 조회 # DB파일 조회(없으면 새로 DB 생성) conn = sqlite3.connect('D:/Python_Basic/resource/database.db', isolation_level=None) # 해당 경로에 database.db DB파일이 생성된다. # 커서 바인딩 cursor = conn.cursor() # 데이터 조회(전체) cursor.execute("SELECT * FROM users") # 커서 위치가 변경 # 1개의 ROW 선택 print('One : ', cursor.fetchone()) # One : (1, 'Lee', 'honggildong@gmail.com', 'lee.com', '000-0000-0001', '2020-12-07 11:36:06') # 지정 row 선택 print('Three : ', cursor.fetchmany(size=3)) ''' 읽은 이후 3 row가 읽혀짐 Three : [(2, 'Park', 'lee@xxx.com', '000-0000-0002', 'http://localhost', '2020-12-07 11:36:06'), (3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06'), (4, 'Kim', 'Kim@dacom.com', '010-0000-0004', 'Kim@com', '2020-12-07 11:36:06')] ''' # 전체선택 # 현재 커서가 위치한 이후의 모든 row를 반환함. print('All : ', cursor.fetchall()) # All : [(5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06')] cursor.close(); print('-----------------------------------------------') # row 순회 선택 cursor = conn.cursor() cursor.execute("SELECT * FROM users") rows = cursor.fetchall() for row in rows: print('retrieval > ', row) ''' result retrieval > (1, 'Lee', 'honggildong@gmail.com', 'lee.com', '000-0000-0001', '2020-12-07 11:36:06') retrieval > (2, 'Park', 'lee@xxx.com', '000-0000-0002', 'http://localhost', '2020-12-07 11:36:06') retrieval > (3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06') retrieval > (4, 'Kim', 'Kim@dacom.com', '010-0000-0004', 'Kim@com', '2020-12-07 11:36:06') retrieval > (5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06') ''' cursor.close() # 동일한 다른 방법(simple) cursor = conn.cursor() cursor.execute("SELECT * FROM users") for row in cursor.fetchall(): print('retrieva2 > ', row) ''' result retrieva2 > (1, 'Lee', 'honggildong@gmail.com', 'lee.com', '000-0000-0001', '2020-12-07 11:36:06') retrieva2 > (2, 'Park', 'lee@xxx.com', '000-0000-0002', 'http://localhost', '2020-12-07 11:36:06') retrieva2 > (3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06') retrieva2 > (4, 'Kim', 'Kim@dacom.com', '010-0000-0004', 'Kim@com', '2020-12-07 11:36:06') retrieva2 > (5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06') ''' cursor.close() # 동일한 다른 방법(simple2) cursor = conn.cursor() for row in cursor.execute("SELECT * FROM users ORDER BY id desc"): print('retrieva3 sorted by id > ', row) cursor.close() ''' result retrieva3 sorted by id > (5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06') retrieva3 sorted by id > (4, 'Kim', 'Kim@dacom.com', '010-0000-0004', 'Kim@com', '2020-12-07 11:36:06') retrieva3 sorted by id > (3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06') retrieva3 sorted by id > (2, 'Park', 'lee@xxx.com', '000-0000-0002', 'http://localhost', '2020-12-07 11:36:06') retrieva3 sorted by id > (1, 'Lee', 'honggildong@gmail.com', 'lee.com', '000-0000-0001', '2020-12-07 11:36:06') ''' print('----------------------') cursor = conn.cursor() # WHERE Retrieve 예제1 (튜플을 이용) param1 = (3, ) cursor.execute('SELECT * FROM users WHERE id=?', param1) # or cursor.execute('SELECT * FROM users WHERE id=?', (3,)) print('param1', cursor.fetchone()) # param1 (3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06') print('param1', cursor.fetchall()) # param1 [] # WHERE Retrieve 예제2 (변수값 이용) param2 = 4 cursor.execute('SELECT * FROM users WHERE id="%s"' % param2) # %s, %f, %d print('param2', cursor.fetchone()) # param2 (4, 'Kim', 'Kim@dacom.com', '010-0000-0004', 'Kim@com', '2020-12-07 11:36:06') print('param2', cursor.fetchall()) # param2 [] # WHERE Retrieve 예제3 (딕셔너리 이용) cursor.execute('SELECT * FROM users WHERE id=:Id', {"Id":5}) print('param3', cursor.fetchone()) # param3 (5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06') print('param3', cursor.fetchall()) # param3 [] # WHERE Retrieve 예제4, 다중조건 (튜플) param4 = (3, 5) cursor.execute('SELECT * FROM users WHERE id in (?,?)', param4) print('param4', cursor.fetchall()) # param4 [(3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06'), (5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06')] # WHERE Retrieve 예제5, 다중조건 (다중변수) cursor.execute('SELECT * FROM users WHERE id in (%d,%d)' % (3,4)) print('param5', cursor.fetchall()) # param5 [(3, 'Lee', 'Lee@dacom.com', '010-0000-0003', 'lee2@com', '2020-12-07 11:36:06'), (4, 'Kim', 'Kim@dacom.com', '010-0000-0004', 'Kim@com', '2020-12-07 11:36:06')] # WHERE Retrieve 예제6, 다중조건 (딕셔너리) cursor.execute('SELECT * FROM users WHERE id=:Id or id=:Id2', {"Id":2, "Id2":5}) print('param6', cursor.fetchall()) # param6 [(2, 'Park', 'lee@xxx.com', '000-0000-0002', 'http://localhost', '2020-12-07 11:36:06'), (5, 'Jang', 'Jang@dacom.com', '010-0000-0005', 'Jang@com', '2020-12-07 11:36:06')] # Dump 출력(with문을 사용하면 with문 종료시점에서 close가 자동 호출됨을 유의) with conn: with open('D:/Python_Basic/Resource/dump.sql', 'w') as f: for line in conn.iterdump(): f.write('%s\n' % line) print('Dump Print Complete') ''' result text in dump.sql file BEGIN TRANSACTION; CREATE TABLE users(id integer primary key, username text, email text, phone text, website text, regdate); INSERT INTO "users" VALUES(1,'Lee','honggildong@gmail.com','lee.com','000-0000-0001','2020-12-07 11:36:06'); INSERT INTO "users" VALUES(2,'Park','lee@xxx.com','000-0000-0002','http://localhost','2020-12-07 11:36:06'); INSERT INTO "users" VALUES(3,'Lee','Lee@dacom.com','010-0000-0003','lee2@com','2020-12-07 11:36:06'); INSERT INTO "users" VALUES(4,'Kim','Kim@dacom.com','010-0000-0004','Kim@com','2020-12-07 11:36:06'); INSERT INTO "users" VALUES(5,'Jang','Jang@dacom.com','010-0000-0005','Jang@com','2020-12-07 11:36:06'); COMMIT; '''
'프로그래밍 > Python' 카테고리의 다른 글
[DJango-프로젝트 환경설정] (0) | 2020.12.21 |
---|---|
[요약] 파이썬(Python) SQLite - 테이블 수정/삭제 (0) | 2020.12.07 |
[요약] 파이썬(Python) SQLite DB 연동 (0) | 2020.12.07 |
[요약] 파이썬(Python) - 엑셀(Excel)/CSV 파일 읽기 쓰기 (0) | 2020.12.06 |
[요약] 파이썬(Python) - 예외처리(Exception) (0) | 2020.12.02 |