Python에서 SQLite3 사용하는 방법 핵심 요약 및 소스코드 예제!
파이썬의 경우 sqlite3을 표준 라이브러리로 제공하고 있다. 그래서 파이썬을 설치했다면, 별다른 추가 설치 없이 sqlite3을 이용할 수 있다. sqlite3은 다음과 같이 불러 올 수 있다. 참고로 아래 소스코드를 실행하면 '3.21.0'와 같은 SQLite의 버전명이 출력된다. 이것은 파이썬 라이브러리 버전은 아니고, SQLite의 버전으로 이해할 수 있다.
import sqlite3
print(sqlite3.sqlite_version)
※ 데이터베이스 생성 ※
데이터베이스를 생성할 때는 간단히 connect() 메서드를 사용하면 된다. 이때 메서드의 인자로 넣은 값이 데이터베이스 파일의 경로가 된다. 예를 들어 'my_database.db'라는 파일을 생성하고자 한다면 다음과 같이 한다. 현재 'my_database.db'라는 데이터베이스 파일이 없기 때문에, 새롭게 생성된 것을 확인할 수 있다.
※ 테이블 생성 ※
SQL 구문을 이용하기 위해서는 cursor 객체가 필요하다. cursor 객체를 이용하여 실제로 데이터베이스에 테이블(table)을 삽입하거나, 테이블(table)을 조회할 수 있다. 예를 들어 다음의 명령어는 Course(과목)라는 이름의 테이블을 생성한다. 이후에 생성된 테이블 정보를 조회한다.
import sqlite3
con = sqlite3.connect('./my_database.db')
cursor = con.cursor()
SQL = "CREATE TABLE Course (Course_ID int primary key not null, Course_Name text, Course_Date date);"
cursor.execute(SQL)
SQL = "SELECT name FROM sqlite_master WHERE type='table';"
cursor.execute(SQL)
print(cursor.fetchall())
SQL = "SELECT sql FROM sqlite_master WHERE type='table';"
cursor.execute(SQL)
print(cursor.fetchall())
con.close()
실행 결과는 다음과 같다.
[('Course',)]
[('CREATE TABLE Course (Course_ID int primary key not null, Course_Name text, Course_Date date)',)]
※ 데이터 삽입 ※
데이터를 삽입할 때는 INSERT 구문을 사용한다. 참고로 데이터를 삽입(insert)하는 명령어를 실행한 뒤에 데이터베이스에 반영하기 위해 commit() 메서드를 호출해야 한다.
import sqlite3
con = sqlite3.connect('./my_database.db')
cursor = con.cursor()
SQL = "INSERT INTO Course VALUES(1, 'Algorithm', '2021-03-01');"
cursor.execute(SQL)
SQL = "INSERT INTO Course VALUES(2, 'Data Structure', '2021-03-02');"
cursor.execute(SQL)
SQL = "INSERT INTO Course VALUES(3, 'Computer Architecture', '2021-03-05');"
cursor.execute(SQL)
con.commit()
SQL = "SELECT * FROM Course;"
cursor.execute(SQL)
print(cursor.fetchall())
con.close()
실행 결과는 다음과 같다.
[(1, 'Algorithm', '2021-03-01'), (2, 'Data Structure', '2021-03-02'), (3, 'Computer Architecture', '2021-03-05')]
※ 데이터 삭제 ※
데이터 삭제는 DELETE 구문을 사용하면 된다. 예를 들어 Course 테이블에 있는 모든 데이터(row)를 삭제하기 위해서는 다음과 같이 하면 된다. INSERT 구문과 마찬가지로 실행 뒤에 commit() 메서드를 이용해 DB에 반영할 수 있다. 위 코드를 실행하면 Course 테이블에 존재하는 모든 데이터가 삭제되기 때문에, 조회 결과가 없다.
import sqlite3
con = sqlite3.connect('./my_database.db')
cursor = con.cursor()
SQL = "DELETE FROM Course;"
cursor.execute(SQL)
con.commit()
SQL = "SELECT * FROM Course;"
cursor.execute(SQL)
print(cursor.fetchall())
con.close()
※ 하나의 테이블로 구성되는 간단한 데이터베이스 연동 프로그램 예시 ※
파이썬에서 SQLite 3 문법을 활용한 간단한 데이터베이스 연동 프로그램은 다음과 같다.
import sqlite3
database_name = './my_database.db'
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "CREATE TABLE IF NOT EXISTS Course (Course_ID int primary key not null, Course_Name text, Course_Date date);"
cursor.execute(SQL)
con.close()
def insert_course(course_id, course_name, course_date):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "INSERT INTO Course VALUES(?, ?, ?);"
cursor.execute(SQL, (course_id, course_name, course_date))
con.commit()
con.close()
def insert_course_list(course_list):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "INSERT INTO Course VALUES(?, ?, ?);"
cursor.executemany(SQL, course_list)
con.commit()
con.close()
def search_course_by_name(course_name):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "SELECT * FROM Course WHERE course_name = ?;"
cursor.execute(SQL, (course_name, ))
return cursor.fetchall()
def search_course():
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "SELECT * FROM Course;"
cursor.execute(SQL)
return cursor.fetchall()
def search_course_order_by_date(limit):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "SELECT * FROM Course ORDER BY date(course_date) ASC Limit ?;"
cursor.execute(SQL, (limit, ))
return cursor.fetchall()
def update_course_by_id(course_id, course_name, course_date):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "UPDATE Course SET course_name = ?, course_date = ? WHERE course_id = ?;"
cursor.execute(SQL, (course_name, course_date, course_id))
con.commit()
con.close()
def delete_course_by_id(course_id):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "DELETE FROM Course WHERE course_id = ?;"
cursor.execute(SQL, (course_id, ))
con.commit()
con.close()
delete_course_by_id(1)
delete_course_by_id(2)
delete_course_by_id(3)
delete_course_by_id(4)
delete_course_by_id(5)
insert_course(1, 'Algorithm', '2021-03-01')
insert_course(2, 'Data Structure', '2021-03-02')
insert_course(3, 'Computer Architecture', '2021-03-05')
course_list = [
(4, 'Programming Language', '2021-03-04'),
(5, 'Compiler', '2021-03-01'),
]
insert_course_list(course_list)
print(search_course_by_name('Algorithm'))
update_course_by_id(1, 'Cyber Security', '2021-03-03')
print(search_course())
print(search_course_order_by_date(100))
print(search_course_order_by_date(100)[::-1])
실행 결과는 다음과 같다.
[(1, 'Algorithm', '2021-03-01')]
[(1, 'Cyber Security', '2021-03-03'), (2, 'Data Structure', '2021-03-02'), (3, 'Computer Architecture', '2021-03-05'), (4, 'Programming Language', '2021-03-04'), (5, 'Compiler', '2021-03-01')]
[(5, 'Compiler', '2021-03-01'), (2, 'Data Structure', '2021-03-02'), (1, 'Cyber Security', '2021-03-03'), (4, 'Programming Language', '2021-03-04'), (3, 'Computer Architecture', '2021-03-05')]
[(3, 'Computer Architecture', '2021-03-05'), (4, 'Programming Language', '2021-03-04'), (1, 'Cyber Security', '2021-03-03'), (2, 'Data Structure', '2021-03-02'), (5, 'Compiler', '2021-03-01')]
※ 날짜 관련 코드 ※
참고로 현재 시각과 같은 날짜 및 시간 데이터가 필요할 때는 다음의 코드를 활용할 수 있다.
import sqlite3
database_name = './my_database.db'
con = sqlite3.connect(database_name)
cursor = con.cursor()
# 세계표준시
SQL = "SELECT strftime('%Y-%m-%d %H:%M:%S', 'now');"
cursor.execute(SQL)
print(cursor.fetchall())
# 현지시간
SQL = "SELECT strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime');"
cursor.execute(SQL)
print(cursor.fetchall())
실행 결과는 다음과 같은 형태를 갖는다.
[('2021-07-18 12:09:18',)]
[('2021-07-18 21:09:18',)]
'기타' 카테고리의 다른 글
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법 (0) | 2021.07.20 |
---|---|
DB Browser for SQLite (DB4S) 설치 및 사용 방법 (0) | 2021.07.19 |
미리캔버스 무료 PPT 템플릿을 이용한 PPT/배너/썸네일 제작 방법! (0) | 2021.07.11 |
유튜버를 위한 단역 배우 섭외 방법 Feat. 인스타그램 DM (0) | 2021.07.10 |
주식 기본 용어 - HTS란 무엇일까? MTS, WTS에 대해서도 알아보자! (0) | 2021.07.10 |