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 접속 및 연결 방법에 대해서 알아봤습니다. 필요에 맞게 활용하시면 데이터베이스 사용에 매우 용이합니다.
[관련글]