[파이썬] `PyQt`와 `SQL` 통합

PyQt는 파이썬으로 작성된 Qt 라이브러리를 위한 바인딩이다. Qt는 플랫폼 간 어플리케이션 개발을 위한 대표적인 프레임워크로, 사용자 인터페이스(UI) 개발을 위한 다양한 도구와 기능을 제공한다. 이번 글에서는 PyQtSQL을 통합하여 데이터베이스와의 상호작용을 어떻게 할 수 있는지 알아보겠다.

PyQt를 이용한 GUI 애플리케이션 개발

먼저, PyQt를 이용하여 간단한 GUI 애플리케이션을 개발하는 방법을 살펴보자. 아래 예제는 버튼을 클릭하면 레이블에 메시지를 표시하는 간단한 애플리케이션이다.

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.label = QLabel("Hello, PyQt!", self)

        self.button = QPushButton("Click Me", self)
        self.button.clicked.connect(self.display_message)

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)

        self.setLayout(layout)
        self.setWindowTitle("My PyQt App")

    def display_message(self):
        self.label.setText("Button Clicked!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

위 예제에서는 QLabelQPushButton을 생성하여 QVBoxLayout 레이아웃으로 배치한 후, 버튼을 클릭하면 display_message 메서드가 호출되어 레이블의 텍스트를 변경한다.

SQL 데이터베이스와의 통합

PyQtQt 프레임워크의 다양한 기능을 제공하며, 그 중에는 데이터베이스와의 상호작용을 위한 클래스들도 포함되어 있다. 이를 이용하여 SQL 데이터베이스와의 통합을 간편하게 할 수 있다.

아래 예제는 SQLite 데이터베이스와 PyQt를 이용하여 데이터를 저장하고 조회하는 간단한 애플리케이션을 보여준다.

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtSql import QSqlDatabase, QSqlQuery

def create_database():
    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName("mydatabase.db")

    if not db.open():
        return False

    query = QSqlQuery()
    query.exec_("CREATE TABLE IF NOT EXISTS mytable (id INT PRIMARY KEY, name VARCHAR)")

    return True

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.label = QLabel("Database Example", self)

        self.button_insert = QPushButton("Insert Data", self)
        self.button_insert.clicked.connect(self.insert_data)

        self.button_select = QPushButton("Select Data", self)
        self.button_select.clicked.connect(self.select_data)

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button_insert)
        layout.addWidget(self.button_select)

        self.setLayout(layout)
        self.setWindowTitle("Database Example")

    def insert_data(self):
        query = QSqlQuery()
        query.exec_("INSERT INTO mytable VALUES (1, 'John')")
        query.exec_("INSERT INTO mytable VALUES (2, 'Jane')")
        query.exec_("INSERT INTO mytable VALUES (3, 'Tom')")

    def select_data(self):
        query = QSqlQuery("SELECT * FROM mytable")
        while query.next():
            id = query.value(0)
            name = query.value(1)
            print(f"ID: {id}, Name: {name}")

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

    if not create_database():
        print("Failed to open database")
        sys.exit(1)

    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

위 예제에서는 create_database 함수를 이용하여 데이터베이스를 생성하고, MainWindow 클래스에 데이터 삽입과 조회를 위한 메서드들을 구현하였다. QPushButton을 클릭하면 데이터베이스에 데이터가 삽입되고, 조회 버튼을 클릭하면 데이터가 출력된다.

PyQt를 사용하여 SQL 데이터베이스와의 통합을 구현하는 것은 매우 간단하며, 이를 통해 다양한 애플리케이션에서 데이터베이스를 활용할 수 있다.