이 강좌에서는 PyQt를 사용하여 데이터베이스와 연동하는 방법을 학습합니다. 특히, 데이터 삽입, 업데이트, 삭제 작업을 중점적으로 다루며, SQLite 데이터베이스를 예제로 사용합니다. PyQt는 Python에서의 GUI 개발을 위한 프레임워크로, Qt 라이브러리를 기반으로 하고 있으며, 데이터베이스 관리와 같은 다양한 기능을 손쉽게 구현할 수 있도록 합니다. 이 강좌를 통해 여러분은 기본적인 PyQt application을 구축하고 데이터베이스 연동을 통해 데이터를 관리하는 데 도움이 될 것입니다.
1. PyQt 설치 및 환경 설정
PyQt5를 설치하는 가장 간단한 방법은 pip 패키지를 사용하는 것입니다. 다음 명령어를 통해 PyQt5와 SQLite3 모듈을 설치할 수 있습니다:
pip install PyQt5
1.1 기본적인 PyQt5 애플리케이션 생성
애플리케이션의 기본 구조는 다음과 같습니다:
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
app = QApplication([])
window = QWidget()
window.setWindowTitle('Hello PyQt!')
label = QLabel('Hello, PyQt!', parent=window)
window.show()
app.exec_()
코드를 실행하면 간단한 윈도우가 나타나고 “Hello, PyQt!”라는 텍스트가 표시됩니다.
2. SQLite 데이터베이스 이해하기
SQLite는 가벼운 데이터베이스로, 대부분의 애플리케이션에 이상적입니다. 특별한 서버 설치 없이 파일 기반의 데이터베이스를 구현할 수 있습니다. 이 장에서는 SQLite의 기본적인 사용법을 학습합니다.
2.1 SQLite 데이터베이스 생성 및 연결
다음 코드를 사용하여 SQLite 데이터베이스를 생성하고 연결할 수 있습니다:
import sqlite3
connection = sqlite3.connect('example.db') # example.db라는 파일명으로 데이터베이스 생성
cursor = connection.cursor()
2.2 데이터 테이블 생성
다음 SQL 명령어를 사용하여 데이터베이스에 테이블을 생성합니다.
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
''')
connection.commit() # 변경 내용을 데이터베이스에 저장
3. PyQt와 SQLite 연동
이제 PyQt와 SQLite를 결합하여 데이터베이스 연동 애플리케이션을 구현해보겠습니다. 사용자가 데이터를 입력하고, 업데이트하며, 삭제할 수 있는 인터페이스를 설계합니다.
3.1 기본 UI 설계
다음은 기본 UI를 만드는 코드입니다:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QMessageBox
class UserApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('User Management')
self.setGeometry(100, 100, 300, 200)
self.layout = QVBoxLayout()
self.name_input = QLineEdit(self)
self.name_input.setPlaceholderText('Enter your name')
self.age_input = QLineEdit(self)
self.age_input.setPlaceholderText('Enter your age')
self.add_button = QPushButton('Add User', self)
self.add_button.clicked.connect(self.add_user)
self.layout.addWidget(self.name_input)
self.layout.addWidget(self.age_input)
self.layout.addWidget(self.add_button)
self.setLayout(self.layout)
def add_user(self):
name = self.name_input.text()
age = self.age_input.text()
# 데이터 삽입 함수 구현 예정
if __name__ == '__main__':
app = QApplication([])
user_app = UserApp()
user_app.show()
app.exec_()
3.2 데이터 삽입 기능 구현
이제 사용자가 입력한 데이터를 데이터베이스에 삽입하는 기능을 추가하겠습니다. add_user
메서드에 다음 코드를 추가합니다:
def add_user(self):
name = self.name_input.text()
age = self.age_input.text()
if name and age:
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))
connection.commit()
QMessageBox.information(self, 'Success', 'User added successfully!')
self.name_input.clear()
self.age_input.clear()
else:
QMessageBox.warning(self, 'Warning', 'Please enter both name and age.')
3.3 데이터 업데이트 기능 구현
데이터 업데이트를 위한 UI와 메서드를 추가해 보겠습니다.
self.update_button = QPushButton('Update User', self)
self.update_button.clicked.connect(self.update_user)
self.layout.addWidget(self.update_button)
def update_user(self):
name = self.name_input.text()
age = self.age_input.text()
if name and age:
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (age, name))
connection.commit()
QMessageBox.information(self, 'Success', 'User updated successfully!')
self.name_input.clear()
self.age_input.clear()
else:
QMessageBox.warning(self, 'Warning', 'Please enter both name and age.')
3.4 데이터 삭제 기능 구현
마지막으로 데이터 삭제 기능을 추가하겠습니다.
self.delete_button = QPushButton('Delete User', self)
self.delete_button.clicked.connect(self.delete_user)
self.layout.addWidget(self.delete_button)
def delete_user(self):
name = self.name_input.text()
if name:
cursor.execute('DELETE FROM users WHERE name = ?', (name,))
connection.commit()
QMessageBox.information(self, 'Success', 'User deleted successfully!')
self.name_input.clear()
else:
QMessageBox.warning(self, 'Warning', 'Please enter a name to delete.')
4. 코드 전체 보기
이제까지 작성한 전체 코드는 다음과 같습니다:
import sqlite3
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QMessageBox
connection = sqlite3.connect('example.db')
cursor = connection.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
''')
connection.commit()
class UserApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('User Management')
self.setGeometry(100, 100, 300, 200)
self.layout = QVBoxLayout()
self.name_input = QLineEdit(self)
self.name_input.setPlaceholderText('Enter your name')
self.age_input = QLineEdit(self)
self.age_input.setPlaceholderText('Enter your age')
self.add_button = QPushButton('Add User', self)
self.add_button.clicked.connect(self.add_user)
self.layout.addWidget(self.name_input)
self.layout.addWidget(self.age_input)
self.layout.addWidget(self.add_button)
self.update_button = QPushButton('Update User', self)
self.update_button.clicked.connect(self.update_user)
self.layout.addWidget(self.update_button)
self.delete_button = QPushButton('Delete User', self)
self.delete_button.clicked.connect(self.delete_user)
self.layout.addWidget(self.delete_button)
self.setLayout(self.layout)
def add_user(self):
name = self.name_input.text()
age = self.age_input.text()
if name and age:
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))
connection.commit()
QMessageBox.information(self, 'Success', 'User added successfully!')
self.name_input.clear()
self.age_input.clear()
else:
QMessageBox.warning(self, 'Warning', 'Please enter both name and age.')
def update_user(self):
name = self.name_input.text()
age = self.age_input.text()
if name and age:
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (age, name))
connection.commit()
QMessageBox.information(self, 'Success', 'User updated successfully!')
self.name_input.clear()
self.age_input.clear()
else:
QMessageBox.warning(self, 'Warning', 'Please enter both name and age.')
def delete_user(self):
name = self.name_input.text()
if name:
cursor.execute('DELETE FROM users WHERE name = ?', (name,))
connection.commit()
QMessageBox.information(self, 'Success', 'User deleted successfully!')
self.name_input.clear()
else:
QMessageBox.warning(self, 'Warning', 'Please enter a name to delete.')
if __name__ == '__main__':
app = QApplication([])
user_app = UserApp()
user_app.show()
app.exec_()
5. 마무리
이 강좌에서는 PyQt와 SQLite를 연동하여 데이터를 삽입, 업데이트 및 삭제하는 방법을 학습했습니다. PyQt를 통해 GUI 애플리케이션을 개발하는 것은 매우 유용하며, 데이터베이스를 연동함으로써 데이터를 쉽게 관리할 수 있습니다. 계속해서 PyQt의 다양한 기능을 학습하여 보다 고급 애플리케이션을 만들어 보세요!