카테고리 없음

PyQt로 구현한 프로그램 이용해서 데이터베이스 다루기!

elpsaicongree 2024. 10. 8. 16:43

파이썬 외장 모듈인 GUI 프로그램 PyQt5를 사용해서

 

간단한 데이터베이스를 만든 뒤 표시되게 하는 작업을 해보겠습니다!

 

코드 위에 주석으로 각 기능들을 설명해두었습니다.

'''
PyQt 로 만든 창 안에서
데이터베이스 테이블에 데이터 추가가 가능하도록
기능을 구현해보자!
추가할 기능
1. 생성자 안에 데이터베이스 테이블 추가 작업 넣기

2. 버튼 누르면 데이터베이스 테이블에 데이터 삽입되게 하기
'''


# PyQt가 제공하는 여러 모듈들을 가져옵니다.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, \
QGridLayout, QLabel, QLineEdit, QPushButton


#SQL도 가져와줍니다
import sqlite3

class App(QMainWindow) :
    def __init__(self):
        super().__init__()
        self.initDB()
        self.initUI()
    # fruits라고 이름짓는 DB를 만들어줍니다
    def initDB(self):
        connection = sqlite3.connect("fruits.db")
        cursor = connection.cursor()
       
        # 테이블이 있다면 있는 거 쓰고, 없을 경우에만 새로 만들기
        cursor.execute("CREATE TABLE IF NOT EXISTS fruit(name TEXT, season TEXT)")
        cursor.close()
        connection.close()
       
       
        # UI를 만들어줍니다!
    def initUI(self) :

        # 영역 만들고 레이아웃 설정
        widget = QWidget()
        grid = QGridLayout()
        widget.setLayout(grid)

        # 요소 배치 : 라벨 2개, 입력창 2개, 버튼 1개
       
        # 라벨 2개 만들기
        grid.addWidget(QLabel("과일 :"), 0, 0)
        grid.addWidget(QLabel("계절 :"), 1, 0)

        # 입력창 2개 만들기
        self.le1 = QLineEdit()
        self.le2 = QLineEdit()
        grid.addWidget(self.le1, 0, 1)
        grid.addWidget(self.le2, 1, 1)

        # 버튼 2개 만들기!

        self.btn1 = QPushButton("INSERT")
        self.btn2 = QPushButton("DELETE")

        # 이벤트 핸들러 함수 매칭하기
        # 클릭 되었을 때 동작할 기능의 정의!

        self.btn1.clicked.connect(self.handleClick1)
        self.btn2.clicked.connect(self.handleClick2)
        grid.addWidget(self.btn1, 2, 1)
        grid.addWidget(self.btn2, 3, 1)

        # 레이아웃 설정된 영역을 메인 창에 추가하기

        self.setCentralWidget(widget)
        self.setWindowTitle('데이터베이스 프로그램')
        self.move(600, 400)
        self.show()

        # self.btn1.clicked.connect(self.???) 버튼 클릭시 작동될 함수들을 정의해줍니다!

    def handleClick1(self) :
        fruit_name = self.le1.text()
        fruit_season = self.le2.text()

        connection = sqlite3.connect("fruits.db")
        cursor = connection.cursor()
        cursor.execute(f"INSERT INTO fruit VALUES ('{fruit_name}', '{fruit_season}')")
        connection.commit()
        cursor.close()
        connection.close()

    def handleClick2(self) :
        fruit_name = self.le1.text()
        fruit_season = self.le2.text()

        connection = sqlite3.connect("fruits.db")
        cursor = connection.cursor()
        cursor.execute(f"DELETE FROM fruit WHERE name='{fruit_name}' AND season='{fruit_season}'")
   
        connection.commit()
        cursor.close()
        connection.close()        
       

    # 내가 직접 이 파일을 실행하는 경우 써줘야 하는 함수!
if __name__ == '__main__':
   app = QApplication(sys.argv)
   view = App()
   sys.exit(app.exec_())

 

 

해당 코드를 입력 후 실행시키면

코드 실행 결과

해당 프로그램이 생성됩니다.

 

fruit테이블에 name과 season이란 열을 가진 데이터베이스를 생성해 두었기때문에

 

INSERT시 데이터베이스에 추가되어 저장되고 DELETE시 삭제됩니다.

 

DB Browser를 통해 insert 후 확인한 결과

 

delete도 잘 작동되었습니다.