본문 바로가기

프로그래밍/Python

[요약] 파이썬(Python) SQLite - 테이블조회

[요약] 파이썬(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;
'''