반응형

sqlite3 테이블에 데이터를 삽입하는 Python 예제코드입니다.



2023. 11. 23 최초작성

2024. 3. 7    에러처리 코드 추가

 

import sqlite3



database_file_path = 'zodiac.db'  # 데이터베이스 파일 이름입니다.
table_name = 'zodiac'                  # 테이블 이름입니다.


try:
    conn = sqlite3.connect(database_file_path)
    cursor = conn.cursor()
    print("Database connection successful!")
except sqlite3.Error as e:
    print(f"Database connection failed: {e}")
    exit()
# database_file_path에 위치한 SQLite 데이터베이스 파일에 연결을 시도합니다.
# 이 경로에 파일이 존재하지 않으면, 새 데이터베이스 파일을 생성합니다.
# 데이터베이스 파일에 연결이 성공하면 Connection 객체를 반환합니다.


cursor = conn.cursor()
# 데이터베이스에 SQL 쿼리를 실행할 때 사용되는 Cursor 객체를 반환합니다.
# 이 Cursor 객체를 사용하여 SQL 명령을 데이터베이스에 보내고, 결과를 받을 수 있습니다.


query = f'DROP TABLE {table_name}'
try:
    cursor.execute(query)
    print("Table delection successful!")
except sqlite3.Error as e:
    print(f"Table delection failed: {e}")
# 테이블에 데이터 삽입하는 테스트 목적 코드이기 때문에 실행할때마다 기존 테이블을 삭제합니다.


# 테이블을 생성합니다.
query = f'''
CREATE TABLE IF NOT EXISTS {table_name} (
    year INTEGER PRIMARY KEY,
    animal TEXT
)
'''
# CREATE TABLE IF NOT EXISTS {table_name}
# 변수 table_name로 지정한 테이블이 존재하는지 확인하고 없으면 새로 생성합니다.
#
# 테이블에 두 개의 열을 정의하고 있습니다.
# 1.  year INTEGER PRIMARY KEY
#      year 컬럼은 INTEGER 타입으로 연도를 저장하기 위해 사용됩니다.
#      각 행의 고유한 식별자로 작동하는 기본 키(primary key)로 설정됩니다
#
# 2. animal TEXT
#      animal 컬럼은 TEXT 타입으로, 연도에 해당하는 동물의 이름을 저장합니다.


try:
    cursor.execute(query)
    print("Table creation successful!")
except sqlite3.Error as e:
    print(f"Table creation failed: {e}")
    conn.close()
    exit()
# Cursor 객체의 execute 메소드를 사용하여 지정된 쿼리를 데이터베이스 엔진에 전달합니다.
# 여기에선 테이블 생성 퀴리를 전달합니다.




animals = [ '쥐', '소', '호랑이', '토끼', '용', '뱀', '말', '양', '원숭이', '닭', '개', '돼지' ]
# 12지신의 동물 순서대로 정의합니다.


year = 2000  # 시작 연도입니다.
# 2000년부터 2023년까지의 12지신 동물 이름을 테이블에 삽입합니다.


for _ in range(24):  # 2000~ 2023의 해를 반복합니다.

    animal = animals[(year - 2000 + 4) % 12# 동물 이름을 결정합니다. 2000년은 용의 해이기 때문에 4을 더해주고 열두번마다 동물 순서가 반복되도록 합니다.


    try:
        cursor.execute(f'INSERT INTO {table_name} (year, animal) VALUES (?, ?)', (year, animal))
    except sqlite3.Error as e:
        print(f"Data insertion failed: {e}")

    # Cursor 객체의 execute 메소드를 사용하여 지정된 쿼리를 데이터베이스 엔진에 전달합니다.
    # 여기에선 연도 year와 동믈 이름 animal을 변수 table_name으로 지정한 테이블에 삽입합니다.
    # {table_name} 다음에 오는 (year, animal)는 데이터를 삽입할 컬럼의 이름입니다.
    # VALUES 다음에 오는 (?, ?)에는 execute의 두번째 아규먼트로 주어진  (year, animal) 튜플이 차례대로 값을 제공합니다.
    # 첫번째 ?에는 year의 값이, 두번째 ?에는 animal의 값이 제공됩니다.

    year += 1 # 다음 해로 넘어갑니다.



conn.commit()
# 변경사항을 커밋합니다.
# conn 객체를 사용하여 실행된 모든 SQL 문의 결과를 데이터베이스에 저장합니다.


cursor.execute(f'SELECT * FROM {table_name}')
# Cursor 객체의 execute 메소드를 사용하여 지정된 쿼리를 데이터베이스 엔진에 전달합니다.
# 여기에선  table_name 변수에 저장된 이름의 테이블로부터 모든 컬럼(*)에 대한 모든 데이터를 선택하여 반환하라고 요청합니다.


results = cursor.fetchall()
# cursor에 의해 실행된 마지막 `SELECT` 쿼리의 결과로 반환된 모든 행(row)을 가져와 변수 results에 저장합니다.
# 각 행은 튜플 형식으로 저장되며, 이 튜플들의 리스트가 변수 results에 저장됩니다.


cursor.close()
# 커서와 데이터베이스 연결을 종료합니다.


conn.close()
# close() 메소드를 사용하여 데이터베이스 연결을 안전하게 종료합니다.



for result in results:
    print(result)
  # 결과 데이터를 출력합니다.



실행결과입니다. 테이블에 삽입되어있던 연도와 동물 이름을 출력해줍니다.

 

Database connection successful!
Table delection successful!
Table creation successful!
(2000, '용')
(2001, '뱀')
(2002, '말')
(2003, '양')
(2004, '원숭이')
(2005, '닭')
(2006, '개')
(2007, '돼지')
(2008, '쥐')
(2009, '소')
(2010, '호랑이')
(2011, '토끼')
(2012, '용')
(2013, '뱀')
(2014, '말')
(2015, '양')
(2016, '원숭이')
(2017, '닭')
(2018, '개')
(2019, '돼지')
(2020, '쥐')
(2021, '소')
(2022, '호랑이')
(2023, '토끼')



sqlite3 테이블에 데이터 삽입하는 Python 예제코드

https://webnautes.tistory.com/2225 

 

sqlite3 테이블에 있는 레코드 개수 세는 Python 예제코드

https://webnautes.tistory.com/2223  

 

sqlite3 테이블에 있는 레코드 하나를 랜덤으로 보여주는 Python 예제

https://webnautes.tistory.com/2224 

 

sqlite3 테이블에서 데이터를 검색하는 Python 예제코드

https://webnautes.tistory.com/2226 

 

sqlite3 테이블에서 중복값을 찾는 Python 예제코드

https://webnautes.tistory.com/2233 

 

sqlite3 테이블의 스키마(schema)를 출력하는 Python 예제코드

https://webnautes.tistory.com/2227 








반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts