PyQt6은 Python 프로그래밍 언어를 사용하여 데스크톱 애플리케이션을 개발하기 위한 강력한 프레임워크입니다. SQLite, MySQL 및 PostgreSQL을 포함한 다양한 데이터베이스와의 원활한 통합을 제공합니다. 이 블로그 게시물에서는 PyQt6을 사용하여 이 세 가지 인기 있는 데이터베이스 시스템으로 작업하는 프로세스를 살펴보겠습니다. 데이터베이스 연결, 쿼리 및 일반적인 작업 수행의 기본 사항을 다룹니다. 이제 파이썬 PyQt6 DB SQLite MySQL PostgreSQL 접속 및 연결 방법에 대해 같이 알아봅시다.
데이터베이스 연결 설정
SQLite
SQLite는 별도의 서버가 필요하지 않은 파일 기반 데이터베이스입니다. PyQt6에서 SQLite 연결은 기본 제공 SQLite 지원을 사용하므로 간단합니다. 연결을 설정하려면 QtSql 모듈을 가져와서 QSqlDatabase 클래스를 사용해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import sys from PyQt6.QtCore import Qt from PyQt6.QtSql import QSqlDatabase, QSqlQuery # Establishing a connection to the SQLite database database = QSqlDatabase.addDatabase(“QSQLITE”) database.setDatabaseName(“mydatabase.db”) if not database.open(): print(“Failed to open the database.”) sys.exit(1) # Creating a table query = QSqlQuery() create_table_query = “”“ CREATE TABLE IF NOT EXISTS mytable ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER ) ““” if not query.exec(create_table_query): print(“Failed to create table.”) sys.exit(1) # Executing a query query.exec(“SELECT * FROM mytable”) # Fetching and printing the results while query.next(): id = query.value(0) name = query.value(1) age = query.value(2) print(f“ID: {id}, Name: {name}, Age: {age}”) # Closing the database connection database.close() | cs |
실행화면
이 코드는 PyQt6를 사용하여 SQLite 데이터베이스에 연결하고 테이블을 생성한 후 테이블에서 데이터를 조회하는 예제입니다.
- 라이브러리 및 모듈 임포트:
- sys 모듈: 시스템 관련 기능을 제공하는 파이썬 기본 모듈
- Qt 클래스를 포함하는 PyQt6.QtCore 모듈
- QSqlDatabase 및 QSqlQuery 클래스를 포함하는 PyQt6.QtSql 모듈
- SQLite 데이터베이스 연결:
- QSqlDatabase.addDatabase(“QSQLITE”)를 사용하여 SQLite 데이터베이스에 연결을 추가합니다.
- setDatabaseName(“mydatabase.db”)를 사용하여 연결할 SQLite 데이터베이스 파일 이름을 설정합니다.
- database.open()을 호출하여 데이터베이스를 열고, 열기에 실패하면 오류 메시지를 출력하고 프로그램을 종료합니다.
- 테이블 생성:
- QSqlQuery 객체를 생성합니다.
- create_table_query 변수에 테이블 생성을 위한 SQL 문을 할당합니다.
- query.exec(create_table_query)를 호출하여 테이블을 생성합니다. 생성에 실패하면 오류 메시지를 출력하고 프로그램을 종료합니다.
- 쿼리 실행 및 결과 조회:
- query.exec(“SELECT * FROM mytable”)를 호출하여 mytable 테이블에서 데이터를 조회합니다.
- query.next()를 사용하여 결과의 다음 행으로 이동하며, query.value()를 사용하여 각 열의 값을 가져옵니다.
- 가져온 값을 출력합니다.
- 데이터베이스 연결 종료:
- database.close()를 호출하여 데이터베이스 연결을 닫습니다.
이 코드는 SQLite 데이터베이스에 연결하고 테이블을 생성하여 데이터를 조회하는 기본적인 예제입니다. 코드를 실행하기 전에 mydatabase.db에 대체할 실제 SQLite 데이터베이스 파일을 지정해야 합니다.
MySQL
MySQL 데이터베이스에 연결하려면 호스트, 포트, 사용자 이름, 암호 및 데이터베이스 이름을 제공해야 합니다. QSqlDatabase 클래스를 사용하고 데이터베이스 드라이버를 “QMYSQL”로 설정하여 연결을 설정할 수 있습니다. 또한 MySQL Connector/Python 패키지를 설치해야 할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import sys from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton from PyQt6.QtSql import QSqlDatabase, QSqlQuery class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(“MySQL Database Example”) self.setGeometry(300, 300, 300, 200) self.label = QLabel(“Click the button to create a table and insert data into MySQL”) self.button = QPushButton(“Create Table and Insert Data”) self.button.clicked.connect(self.create_table_and_insert_data) layout = QVBoxLayout() layout.addWidget(self.label) layout.addWidget(self.button) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) def create_table_and_insert_data(self): # Establishing a connection to the MySQL database database = QSqlDatabase.addDatabase(“QMYSQL”) database.setHostName(“localhost”) database.setPort(3306) database.setDatabaseName(“mydatabase”) database.setUserName(“username”) database.setPassword(“password”) if not database.open(): self.label.setText(“Failed to open the database.”) return # Creating a table query = QSqlQuery() create_table_query = “”“ CREATE TABLE IF NOT EXISTS mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, age INT ) ““” if not query.exec(create_table_query): self.label.setText(“Failed to create table.”) database.close() return # Inserting data insert_query = “”“ INSERT INTO mytable (name, age) VALUES (‘John’, 25), (‘Jane’, 30), (‘Mike’, 35) ““” if not query.exec(insert_query): self.label.setText(“Failed to insert data.”) database.close() return self.label.setText(“Table created and data inserted successfully.”) database.close() if __name__ == “__main__”: app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) | cs |
실행화면
이 코드는 PyQt6를 사용하여 SQLite 데이터베이스에 연결하고 테이블을 생성한 후 테이블에서 데이터를 조회하는 예제입니다.
- 라이브러리 및 모듈 임포트:
- sys 모듈: 시스템 관련 기능을 제공하는 파이썬 기본 모듈
- Qt 클래스를 포함하는 PyQt6.QtCore 모듈
- QSqlDatabase 및 QSqlQuery 클래스를 포함하는 PyQt6.QtSql 모듈
- SQLite 데이터베이스 연결:
- QSqlDatabase.addDatabase(“QSQLITE”)를 사용하여 SQLite 데이터베이스에 연결을 추가합니다.
- setDatabaseName(“mydatabase.db”)를 사용하여 연결할 SQLite 데이터베이스 파일 이름을 설정합니다.
- database.open()을 호출하여 데이터베이스를 열고, 열기에 실패하면 오류 메시지를 출력하고 프로그램을 종료합니다.
- 테이블 생성:
- QSqlQuery 객체를 생성합니다.
- create_table_query 변수에 테이블 생성을 위한 SQL 문을 할당합니다.
- query.exec(create_table_query)를 호출하여 테이블을 생성합니다. 생성에 실패하면 오류 메시지를 출력하고 프로그램을 종료합니다.
- 쿼리 실행 및 결과 조회:
- query.exec(“SELECT * FROM mytable”)를 호출하여 mytable 테이블에서 데이터를 조회합니다.
- query.next()를 사용하여 결과의 다음 행으로 이동하며, query.value()를 사용하여 각 열의 값을 가져옵니다.
- 가져온 값을 출력합니다.
- 데이터베이스 연결 종료:
- database.close()를 호출하여 데이터베이스 연결을 닫습니다.
이 코드는 PyQt6를 사용하여 MySQL 데이터베이스와 GUI를 통합한 예제입니다.
- database.close()를 호출하여 데이터베이스 연결을 닫습니다.
- 필요한 라이브러리 및 모듈 임포트:
- sys 모듈: 시스템 관련 기능을 제공하는 파이썬 기본 모듈
- QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton 등을 포함하는 PyQt6.QtWidgets 모듈
- QSqlDatabase, QSqlQuery 등을 포함하는 PyQt6.QtSql 모듈
- MainWindow 클래스 정의:
- QMainWindow를 상속하는 MainWindow 클래스를 정의합니다.
- init 메서드에서 윈도우 제목, 크기, 레이아웃, 라벨 및 버튼을 초기화합니다.
- create_table_and_insert_data 메서드:
- 버튼이 클릭되면 호출되는 메서드입니다.
- MySQL 데이터베이스에 연결을 수립합니다. 연결 정보는 코드에서 주어진 호스트, 포트, 데이터베이스 이름, 사용자 이름, 암호를 사용하여 설정합니다.
- 데이터베이스 연결이 실패하면 라벨에 오류 메시지를 표시하고 메서드를 종료합니다.
- QSqlQuery 객체를 사용하여 mytable 테이블을 생성합니다. 생성에 실패하면 라벨에 오류 메시지를 표시하고 데이터베이스 연결을 닫고 메서드를 종료합니다.
- mytable 테이블에 데이터를 삽입합니다. 삽입에 실패하면 라벨에 오류 메시지를 표시하고 데이터베이스 연결을 닫고 메서드를 종료합니다.
- 작업이 성공적으로 완료되면 라벨에 성공 메시지를 표시하고 데이터베이스 연결을 닫습니다.
- 애플리케이션 실행:
- QApplication을 생성하여 PyQt6 애플리케이션을 초기화합니다.
- MainWindow 객체를 생성하여 메인 윈도우를 생성합니다.
- 윈도우를 화면에 표시하고 이벤트 루프를 실행합니다.
이 코드를 실행하면 MySQL 데이터베이스 연결 및 기본 작업을 수행하는 PyQt6 GUI 애플리케이션이 실행됩니다. 클릭할 버튼이 있는 창이 표시되며, 버튼을 클릭하면 테이블이 생성되고 데이터가 삽입됩니다. 작업 성공 여부에 따라 라벨에 메시지가 표시됩니다.
이 코드는 SQLite 데이터베이스에 연결하고 테이블을 생성하여 데이터를 조회하는 기본적인 예제입니다. 코드를 실행하기 전에 mydatabase.db에 대체할 실제 SQLite 데이터베이스 파일을 지정해야 합니다.
PostgreSQL
PostgreSQL 데이터베이스에 연결하려면 호스트, 포트, 사용자 이름, 암호 및 데이터베이스 이름이 필요합니다. QSqlDatabase 클래스를 사용하고 데이터베이스 드라이버를 “QPSQL”로 설정하여 연결을 설정할 수 있습니다. PostgreSQL과 상호 작용하려면 psycopg2 패키지를 설치해야 할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import sys from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton from PyQt6.QtSql import QSqlDatabase, QSqlQuery class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(“PostgreSQL Database Example”) self.setGeometry(300, 300, 300, 200) self.label = QLabel(“Click the button to create a table and insert data into PostgreSQL”) self.button = QPushButton(“Create Table and Insert Data”) self.button.clicked.connect(self.create_table_and_insert_data) layout = QVBoxLayout() layout.addWidget(self.label) layout.addWidget(self.button) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) def create_table_and_insert_data(self): # Establishing a connection to the PostgreSQL database database = QSqlDatabase.addDatabase(“QPSQL”) database.setHostName(“localhost”) database.setPort(5432) database.setDatabaseName(“mydatabase”) database.setUserName(“username”) database.setPassword(“password”) if not database.open(): self.label.setText(“Failed to open the database.”) return # Creating a table query = QSqlQuery() create_table_query = “”“ CREATE TABLE IF NOT EXISTS mytable ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, age INT ) ““” if not query.exec(create_table_query): self.label.setText(“Failed to create table.”) database.close() return # Inserting data insert_query = “”“ INSERT INTO mytable (name, age) VALUES (‘John’, 25), (‘Jane’, 30), (‘Mike’, 35) ““” if not query.exec(insert_query): self.label.setText(“Failed to insert data.”) database.close() return self.label.setText(“Table created and data inserted successfully.”) database.close() if __name__ == “__main__”: app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) | cs |
실행화면
이 예제에는 QMainWindow에서 상속되는 MainWindow 클래스가 있습니다. 기본 창 내부에는 지침을 표시하는 레이블과 테이블 생성 및 데이터 삽입을 트리거하는 버튼이 있습니다.
create_table_and_insert_data 메서드는 버튼의 clicked 신호에 연결됩니다. 제공된 호스트 이름, 포트, 데이터베이스 이름, 사용자 이름 및 암호를 사용하여 PostgreSQL 데이터베이스에 대한 연결을 설정합니다.
연결을 설정한 후 메서드는 id(자동 증가 직렬 기본 키), name(varchar) 및 age(정수)의 세 열이 있는 mytable이라는 테이블을 만듭니다.
그런 다음 INSERT 문을 사용하여 mytable 테이블에 데이터를 삽입합니다. 이 예에서는 이름과 기간이 다른 세 개의 데이터 행이 삽입됩니다.
적절한 오류 처리가 구현되고 그에 따라 레이블 텍스트가 업데이트됩니다.
애플리케이션을 실행하려면 “localhost”, 5432, “mydatabase”, “username” 및 “password”를 실제 PostgreSQL 연결 세부 정보로 바꾸십시오.
코드를 실행하면 레이블과 버튼이 있는 GUI 창이 나타납니다. 버튼을 클릭하면 테이블 생성 및 데이터 삽입 프로세스가 트리거됩니다. 레이블에는 진행률과 성공/오류 메시지가 표시됩니다.
코드를 실행하기 전에 psycopg2 패키지를 설치해야 합니다. pip install psycopg2를 사용하여 설치할 수 있습니다.
파이썬 PyQt6 DB SQLite MySQL PostgreSQL 접속 및 연결 방법에 대해서 알아봤습니다. 필요에 맞게 활용하시면 데이터베이스 사용에 매우 용이합니다.
[관련글]