새벽코딩

[Python-DB] 4. 데이터의 조회 본문

Programming/Python

[Python-DB] 4. 데이터의 조회

midnightcoder 2022. 12. 23. 14:55

파이썬에서 데이터를 조회하기 위한 Step

단, 데이터 조회는 입력이나 변경하는것이 아니기 때문에, commit() 함수는 사용하지 않는다.

 

# 파이썬에서 데이터를 조회하는 프로그래밍의 순서
# 1. DB 연동
# 2. 커서 생성
# 3. 데이터 조회 (SELECT 문) : 커서를 통해서 조회를 하는데,
#    조회된 내용은 전부 커서에 저장된다. (메모리 저장)
# 4. 조회된 내용들은 출력 : 커서를 이용하여 fetchone(), fetchall() 함수들을 통해서
#    콘솔에 출력하게 된다.
# 5. DB 연결 종료
# commit() 이 빠진 이유는, 조회만 필요해서, 디스크에 저장, 삭제, 수정 등의 쿼리가
# 아니기 때문에 commit()을 사용할 이유가 없다.

import sqlite3
# 전역변수 선언
con, cur = None, None
id, userName, email, birthYear = "", "", "", ""
row = None      # 한 행을 가져와서 저장할 전역변수

if __name__ == "__main__":
    #DB 연결
    con = sqlite3.connect("c:/PythonDB/naverDB")
    # 커서 생성
    cur = con.cursor()
    cur.execute("select * from userTable")  # 조회된 데이터 전부 저장됨

    #1990년 포함 이후 출생한 사용자들을 출력하는 쿼리

    #cur.execute("select * from userTable where birthYear >= 1990")
    #아래 쿼리는 출생연도 컬럼을 기준으로 오름차순 정렬을 하는 쿼리이다.
    #단, 기본값이 asc이기 때문에 asc는 생략 가능하다.

    # cur.execute("select * from userTable order by birthYear")
    #아래 쿼리는 출생연도 컬럼을 기준으로 내림차순 정렬을 하는 쿼리이다.
    #단, 기본값이 asc이기 때문에 asc는 생략 가능하지만,
    #내림 차순을 할때는 desc를 써줘야 한다.
    # cur.execute("select * from userTable order by birthYear desc")

    #아래 쿼리문은 id가 shin인 필터가 된다.
    # cur.execute("select * from userTable where id = 'shin' ")
    # Header 생성
    print("사용자ID    사용자이름       이메일              출생연도")
    print("--------------------------------------------------------")
    # 무한루프를 돌면서 1행씩 가져와서 출력을 한다.
    while True:
        row = cur.fetchone()    #행을 하나씩 가져온다.
        # 무한루프를 빠져나가는 상황
        if row == None:  #더이상 가져올 데이터가 없다면 루프 빠져나와
            break
        # 한 행에 있는 데이터를 각각 전역변수에 저장 후 출력
        id = row[0]
        userName = row[1]
        email = row[2]
        birthYear = row[3]
        print("%5s  %15s    %15s        %5d" % (id, userName, email, birthYear))

    #DB 연결 해제
    con.close()

** 중간에 comment된 부분에서 정렬(오름차순, 내림차순) 및 filter 가 어떤식으로 사용되었는지 확인 가능