본문 바로가기
IT

우분투에서 파이썬으로 sqlite 사용하기 - python ubuntu linux

by eddy's warehouse 2024. 4. 17.

SQLite는 서버리스 데이터베이스로서 SQLite는 서버가 필요 없는 경량 데이터베이스 관리 시스템입니다. 대부분의 스마트폰이나 IOT 기기와 엣지 컴퓨팅 분야에서 사용되고 있습니다. 라이브러리로 되어있어서 응용 프로그램에 내장되어 사용되며, 별도의 서버 프로세스 없이 작동합니다. 크로스 플랫폼을 지원하며, 다양한 환경에서 사용할 수 있습니다.
SQLite는 그 편리함과 가벼움으로 인해 많은 프로그램과 프로젝트에서 널리 사용되고 있습니다.

SQLite은 경량 디스크 기반 데이터베이스로, Python에서도 사용할 수 있습니다. 오늘은 sqlite를 python으로 사용하는 방법에 대해서 알아보겠습니다.

1. SQLite 설치

먼저 SQLite를 사용하기 위해서는 SQLite를 설치해야합니다.

sqlite는 ubuntu linux에서 apt-get으로 간단하게 설치할 수 있습니다. 먼저 update를 수행후 install 명령으로 sqlite3를 설치합니다.

$ sudo apt-get update
$ sudo apt-get install sqlite3
$ sudo apt-get update
[sudo] password for test:
기존:2 https://dl.winehq.org/wine-builds/ubuntu focal InRelease
기존:1 https://packages.microsoft.com/repos/code stable InRelease
무시:3 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 InRelease
기존:4 http://kr.archive.ubuntu.com/ubuntu jammy InRelease
받기:5 http://kr.archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
기존:6 https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 Release
받기:7 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
기존:9 https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu jammy InRelease
기존:10 http://kr.archive.ubuntu.com/ubuntu jammy-backports InRelease
내려받기 229 k바이트, 소요시간 2초 (104 k바이트/초)
패키지 목록을 읽는 중입니다... 완료
W: https://dl.winehq.org/wine-builds/ubuntu/dists/focal/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

$ sudo apt-get install sqlite3
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료
제안하는 패키지:
  sqlite3-doc
다음 새 패키지를 설치할 것입니다:
  sqlite3
0개 업그레이드, 1개 새로 설치, 0개 제거 및 133개 업그레이드 안 함.
768 k바이트 아카이브를 받아야 합니다.
이 작업 후 1,873 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 sqlite3 amd64 3.37.2-2ubuntu0.3 [768 kB]
내려받기 768 k바이트, 소요시간 2초 (347 k바이트/초)
Selecting previously unselected package sqlite3.
(데이터베이스 읽는중 ...현재 238501개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../sqlite3_3.37.2-2ubuntu0.3_amd64.deb ...
Unpacking sqlite3 (3.37.2-2ubuntu0.3) ...
sqlite3 (3.37.2-2ubuntu0.3) 설정하는 중입니다 ...
Processing triggers for man-db (2.10.2-1) ...

 

2. python 코드 작성하기

sqlite3를 설치하고나면, python으로 코드를 작성하면 됩니다. 아래와 같이 간단하게 데이터베이스에 연결하고 테이블을 생성 하면서 바로 데이터에 대한 DML을 수행할 수 있습니다.

테스트 코드

test.py 파일

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('mydatabase.db')

# 테이블 생성
conn.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
    );
''')

# 데이터 추가
conn.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
conn.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))
conn.commit()

# 데이터 조회
cursor = conn.execute('SELECT * FROM users')
for row in cursor:
    print(f'ID: {row[0]}, Name: {row[1]}, Age: {row[2]}')

# 연결 종료
conn.close()

 

위의 코드를 상세히 설명하면 다음과 같습니다.

 

  1. conn = sqlite3.connect('mydatabase.db'): 'mydatabase.db’라는 이름의 SQLite 데이터베이스 파일에 연결합니다. 파일이 존재하지 않으면 새로 생성됩니다. SQLite는 서버리스 데이터베이스이므로 별도의 서버 프로세스 없이 파일 기반으로 동작합니다.
  2. CREATE TABLE IF NOT EXISTS users (...): 'users’라는 이름의 테이블을 생성합니다. 이미 존재하면 생성하지 않습니다. id 필드는 자동 증가하는 기본 키로 설정되어 있으며, name과 age 필드는 NULL 값을 허용하지 않습니다. SQLite는 SQL 명령을 바이트코드로 컴파일한 후 가상 머신을 사용하여 실행합니다
  3. INSERT INTO users (name, age) VALUES (?, ?): ‘users’ 테이블에 두 개의 레코드를 추가합니다. "?"는 매개변수화된 쿼리에서 사용되며, 이후에 제공된 튜플(‘Alice’, 30)과 (‘Bob’, 25)의 값으로 대체됩니다.

테스트 결과

$ python3 test.py
ID: 1, Name: Alice, Age: 30
ID: 2, Name: Bob, Age: 25

 

3. SQLite 콘솔 이용하기 

sqlite는 콘솔에서 데이터베이스에 접근할 수 있습니다. 

좀전에 삽입한 데이터는 아래와 같이 데이터베이스 파일명을 sqlite3 명령 뒤에 인자로 넣어서 확인할 수 있습니다. 

이 때, .tables라는 명령을 통해서 해당 데이터베이스에 있는 테이블을 확인할 수 있습니다. 

% sqlite3 mydatabase.db
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
sqlite> .tables
users
sqlite> select * from users;
1|Alice|30
2|Bob|25
sqlite>

오늘은 우분투 리눅스에 sqlite3를 설치하고 python(파이썬)을 이용해서 SQLite 데이터베이스에 작업을 처리하는 코드를 작성해 보았습니다.

sqlite는 가볍고 간단하게 사용하기 쉬운 임베디드 database로 가장 잘 알려져 있습니다.

복잡하거나 동시 접근 등이 필요하지 않은 프로그램을 작성시에는 sqlite를 이용해 보는 것도 좋을 것 같습니다.

facebook twitter kakaoTalk kakaostory naver band shareLink