[파이썬] `PyQt`에서의 데이터베이스 연동

PyQt는 파이썬으로 GUI 애플리케이션을 개발하기 위한 강력한 프레임워크입니다. 이 프레임워크를 사용하면 다양한 기능을 갖춘 윈도우 애플리케이션을 만들 수 있습니다. 데이터베이스 연동은 대부분의 애플리케이션에서 필요한 기능 중 하나입니다.

이번 포스트에서는 PyQt에서 데이터베이스와의 연동을 어떻게 할 수 있는지 알아보겠습니다. 파이썬이 데이터베이스와 상호작용하기 위해 다양한 라이브러리와 드라이버가 있지만, 여기서는 SQLite 데이터베이스를 연동하는 방법을 다루겠습니다.

SQLite 데이터베이스 생성하기

우선 PyQt에서 SQLite 데이터베이스를 사용하기 위해 sqlite3 모듈을 설치해야 합니다. 다음 명령을 실행하여 모듈을 설치합니다:

pip install sqlite3

이제 데이터베이스 파일을 생성하고 테이블을 만들어 보겠습니다. 다음은 example.db라는 이름의 데이터베이스 파일을 생성하고 users라는 테이블을 만드는 예제입니다:

import sqlite3

def create_database():
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    # users 테이블 생성
    cursor.execute('''
        CREATE TABLE users (
            id INTEGER PRIMARY KEY,
            name TEXT NOT NULL,
            email TEXT NOT NULL
        )
    ''')

    conn.commit()
    conn.close()

create_database()

위 예제에서는 sqlite3.connect() 함수를 사용하여 데이터베이스에 연결하고, cursor() 메서드를 통해 쿼리를 실행할 수 있는 커서를 생성합니다. 이후 execute() 메서드로 SQL 쿼리를 실행하여 테이블을 생성합니다. 생성된 데이터베이스에 데이터를 추가하려면 INSERT 쿼리를 사용하면 됩니다.

PyQt에서 데이터베이스 연동하기

만든 데이터베이스에 PyQt에서 연결하여 데이터를 조회하거나 수정할 수 있습니다. PyQt에서 SQLite 데이터베이스를 연동하려면 QtSql 모듈을 사용해야 합니다. 다음은 QtSql 모듈을 사용하여 데이터베이스에 연결하고 사용자 데이터를 조회하는 예제입니다:

import sys
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
from PyQt5.QtWidgets import QApplication, QMessageBox

def connect_database():
    db = QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName('example.db')

    if not db.open():
        QMessageBox.critical(
            None,
            "Cannot open database",
            "Unable to establish a database connection.",
            QMessageBox.Cancel
        )
        return False

    return True

def query_users():
    query = QSqlQuery()
    query.exec('SELECT * FROM users')

    while query.next():
        id = query.value(0)
        name = query.value(1)
        email = query.value(2)

        print(f'ID: {id}, Name: {name}, Email: {email}')

if __name__ == '__main__':
    app = QApplication(sys.argv)

    if connect_database():
        query_users()

    sys.exit(app.exec_())

위 예제에서는 QSqlDatabase 클래스를 사용하여 데이터베이스에 연결하고, setDatabaseName() 메서드로 연결할 데이터베이스의 경로를 설정합니다. 이후 open() 메서드로 데이터베이스에 연결합니다. 연결에 실패하면 QMessageBox를 사용하여 오류 메시지를 표시합니다. 성공적으로 연결된 후 QSqlQuery를 사용하여 SQL 쿼리를 실행합니다. 이후 next() 메서드로 결과를 하나씩 조회하고, value() 메서드로 조회한 값을 가져옵니다.

마무리

PyQt에서 데이터베이스 연동을 위해 sqlite3QtSql 모듈을 사용하는 방법을 알아보았습니다. 데이터베이스 연동은 많은 애플리케이션에서 중요한 기능이므로, 이를 활용하여 데이터를 저장하고 검색하는 기능을 개발할 수 있습니다. SQLite 이외의 다른 데이터베이스와의 연동을 원한다면, 해당 데이터베이스의 모듈을 설치하고 연결하는 방법을 찾아보시기 바랍니다.

프로젝트에 따라서는 ORM(Object-Relational Mapping) 라이브러리인 SQLAlchemy 등을 사용하여 데이터베이스와의 상호작용을 더욱 편리하게 할 수 있습니다. 하지만 기본적인 데이터베이스 연동 기능만으로도 많은 일을 할 수 있으며, 필요에 따라 추가적인 라이브러리를 사용할 수도 있습니다.

Happy coding!