본문 바로가기
PYTHON(파이썬)/PYSIDE6(GUI)

PYSIDE6 데이터베이스 작업

by eplus 2024. 10. 24.

데이터베이스는 애플리케이션에서 데이터를 저장하고 관리하는 중요한 방법입니다. Qt는 다양한 데이터베이스 시스템과 상호작용할 수 있는 여러 방법을 제공합니다. 이 장에서는 PySide6를 사용하여 데이터베이스와 연동하는 방법을 알아보겠습니다.

 

#### 데이터베이스 연결 설정

Qt `QSqlDatabase` 클래스를 사용하여 데이터베이스 연결을 관리합니다. 이 클래스는 다양한 데이터베이스 시스템(MySQL, PostgreSQL, SQLite )을 지원합니다.

 

**SQLite 데이터베이스 연결 예제**

```python

import sys

from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox

from PySide6.QtSql import QSqlDatabase

 

def create_connection():

    db = QSqlDatabase.addDatabase("QSQLITE")

    db.setDatabaseName("example.db")

 

    if not db.open():

        QMessageBox.critical(None, "Database Connection", "Unable to establish a database connection.")

        return False

    return True

 

app = QApplication(sys.argv)

 

if not create_connection():

    sys.exit(1)

 

window = QMainWindow()

window.setWindowTitle("Database Example")

window.show()

 

app.exec()

```

이 예제에서는 SQLite 데이터베이스에 연결합니다. 데이터베이스가 성공적으로 열리지 않으면, 오류 메시지를 표시하고 애플리케이션을 종료합니다.

 

#### 데이터베이스 쿼리

`QSqlQuery` 클래스를 사용하여 SQL 쿼리를 실행할 수 있습니다. 이 클래스는 데이터베이스에서 데이터를 검색, 삽입, 업데이트 및 삭제하는 데 사용됩니다.

 

**SQL 쿼리 실행 예제**

```python

from PySide6.QtSql import QSqlQuery

 

def initialize_database():

    query = QSqlQuery()

    query.exec("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)")

 

def add_person(name, age):

    query = QSqlQuery()

    query.prepare("INSERT INTO people (name, age) VALUES (?, ?)")

    query.addBindValue(name)

    query.addBindValue(age)

    query.exec()

 

initialize_database()

add_person("John Doe", 30)

add_person("Jane Smith", 25)

```

이 예제에서는 데이터베이스에 `people` 테이블을 생성하고, 두 명의 사람 데이터를 삽입합니다. `QSqlQuery`를 사용하여 SQL 쿼리를 실행하고, `prepare` `addBindValue` 메서드를 사용하여 안전하게 데이터를 바인딩합니다.

 

#### 데이터베이스에서 데이터 읽기

데이터베이스에서 데이터를 읽으려면 `QSqlQuery` `exec` 메서드를 사용하여 쿼리를 실행하고, `next` 메서드를 사용하여 결과를 반복합니다.

 

**데이터 읽기 예제**

```python

def fetch_people():

    query = QSqlQuery("SELECT name, age FROM people")

    while query.next():

        name = query.value(0)

        age = query.value(1)

        print(f"Name: {name}, Age: {age}")

 

fetch_people()

```

이 예제에서는 `people` 테이블에서 이름과 나이를 선택하여 출력합니다. `query.next()`를 사용하여 각 결과 행을 반복합니다.

 

#### QTableView와 데이터베이스 연동

`QTableView` 위젯을 사용하여 데이터베이스의 데이터를 테이블 형식으로 표시할 수 있습니다. 이를 위해 `QSqlTableModel`을 사용하여 데이터베이스 테이블과 연동합니다.

 

**QTableView 예제**

```python

from PySide6.QtWidgets import QTableView

from PySide6.QtSql import QSqlTableModel

 

def setup_model_view():

    model = QSqlTableModel()

    model.setTable("people")

    model.select()

 

    view = QTableView()

    view.setModel(model)

    return view

 

view = setup_model_view()

view.show()

```

이 예제에서는 `QSqlTableModel`을 사용하여 `people` 테이블과 연동하고, `QTableView`를 사용하여 데이터를 표시합니다.

 

### 결론

이 장에서는 PySide6를 사용하여 데이터베이스와 연동하는 방법을 알아보았습니다. SQLite 데이터베이스 연결, SQL 쿼리 실행, 데이터 읽기 및 `QTableView`와의 연동을 다루었습니다. 데이터베이스를 사용하여 애플리케이션의 데이터를 효율적으로 관리할 수 있습니다. 다음 장에서는 네트워킹을 사용하여 데이터를 전송하고 수신하는 방법을 알아보겠습니다.

 

 

728x90
반응형