새벽코딩

[Python-DB] 2. 데이터의 입력과 조회 -2 (실제 user input 코드) 본문

Programming/Python

[Python-DB] 2. 데이터의 입력과 조회 -2 (실제 user input 코드)

midnightcoder 2022. 12. 23. 04:06

https://midnightcoding.tistory.com/70

 

[Python-DB] 데이터의 입력과 조회

Python 에 내장 모듈인 sqlite3 db를 이용해서 실습을 해봄 실습전에, 먼저 c 드라이브 안에 PythonDB 폴더를 만든다. 1) 파이썬에서 데이터 입력을 위한 코딩 순서 용어 cusor() : DB하고 입력하는 창하고의

midnightcoding.tistory.com

이전 글(위에 링크) 에서 일부 데이터를 생성하였고,

이번에는 python을 이용해서 command line에서 user input을 통한 데이터를 db로 저장해보자

 

데이터를 DB에 insert하기 위해서 2가지 방법이 있다.

1) statement 방식 (아래 풀 코드에서 첫번째 방식은 comment해 놓았음)

        # 1) statement 식의 insert into 방식
        # sql = "insert into userTable values('" + id + "', '" + userName + "', '" + email + "', " + birthYear +")"
        #cur.execute(sql)

2) preparedStatement 방식

위의 statemets 방식과 다르게 sql변수에 할당하지 않고, 바로 cur.execute( 안에 ) 넣었다.

# 2) preparedStatement 식의 insert into 방식 (wildcard 사용방식)
        # - statement 식을 이용하는 것 보다 가독성이 좋다.
        # - quotation마크를 안써도 되서 쓰기편함
        # - wildcard 갯수를 헤아려서 그에 맞는 저장할 데이터를 제공해주면 된다 (권장)
        
        
        # sql = "insert into userTable(id, userName, email, birthYear) values(?,?,?,?)", (id, userName, email, birthYear)
        # print(sql)
        cur.execute("insert into userTable(id, userName, email, birthYear) values(?,?,?,?)", (id, userName, email, birthYear))

 

아래는 풀 코드

#사용자로부터 데이터를 입력받아서 DB에 저장하는 실습

import sqlite3

# 전역 변수 선언
con, cur = None, None       # 연결자, 커서를 저장하는 변수 초기화 (객체여서 None으로 초기화)
id, userName, email, birthYear = "", "", "", ""
sql = ""
# 메인코드 부분
if __name__ == "__main__":
    con = sqlite3.connect("c:/PythonDB/naverDB")
    cur = con.cursor()

    # 무한 loop를 돌면서 사용자로부터 데이터를 입력받는 코드
    while True:
        id = input("사용자 ID ==> ")
        # 무한루프의 탈출하는 곳 만들기
        # 사용자가 입력없이 enter key만 입력한경우, loop를 빠져 나옴
        if id == "":
            break
        userName = input("사용자 이름 ==> ")
        email = input("이메일 ==> ")
        birthYear= input("출생연도 ==> ")
        #사용자가 입력한 데이터를 이용하여 query 작성하는 코드
        # 1) statement 식의 insert into 방식
        # sql = "insert into userTable values('" + id + "', '" + userName + "', '" + email + "', " + birthYear +")"
        # 2) preparedStatement 식의 insert into 방식 (wildcard 사용방식)
        # - statement 식을 이용하는 것 보다 가독성이 좋다.
        # - quotation마크를 안써도 되서 쓰기편함
        # - wildcard 갯수를 헤아려서 그에 맞는 저장할 데이터를 제공해주면 된다 (권장)
        # sql = "insert into userTable(id, userName, email, birthYear) values(?,?,?,?)", (id, userName, email, birthYear)
        # print(sql)
        cur.execute("insert into userTable(id, userName, email, birthYear) values(?,?,?,?)", (id, userName, email, birthYear))

    con.commit()
    con.close()

파일 실행 후 console 창에 입력한 데이터는 아래와 같다.

프로그램 실행 후 ▶ commend line(콘솔창) 입력 예시

 

 

 

- Database 조회 ( 중간에 일부코드 지움 - user input 관련 code)

#사용자로부터 데이터를 입력받아서 DB에 저장하는 실습

import sqlite3

# 전역 변수 선언
con, cur = None, None       # 연결자, 커서를 저장하는 변수 초기화 (객체여서 None으로 초기화)
id, userName, email, birthYear = "", "", "", ""
sql = ""
# 메인코드 부분
if __name__ == "__main__":
    con = sqlite3.connect("c:/PythonDB/naverDB")
    cur = con.cursor()

    cur.execute("select * from userTable")
    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))


    con.close()

출력 결과