파이썬 (pythoon)

Python Tkinter sqlite 3 데이터베이스 insert, update, delete

working for you 2023. 6. 14. 10:57
반응형

Python Tkinter sqlite 사용하여 데이터베이스 작업을 위해 데이터베이스용 그래픽 사용자 인터페이스를 구축하는 방법을 살펴봅니다. 필수 개념을 다루고 직관적이고 효율적인 데이터베이스 애플리케이션을 만드는 데 샘플 프로그램을 같이 구축해 보겠습니다.

 

[목차]
1. sqlite3 데이터베이스에 연결
2. Tkinter GUI 프로그램 창 만들기
3. Tkinter GUI 프로그램 창 레이블, 텍스트, 버튼 구성
4. 데이터베이스 작업 구축
5. 확장 기능 및 개선 사항
6. 예제 프로그램 코드
7. 결론 및 의견

 

 

 

1. sqlite3 데이터베이스에 연결

데이터베이스용 GUI를 구축하는 첫 번째 단계는 연결을 설정하는 것입니다. 사용 중인 데이터베이스 관리 시스템(DBMS)에 따라 적절한 데이터베이스 드라이버 또는 모듈을 설치해야 합니다. 예를 들어 SQLite로 작업하는 경우 내장 sqlite3 모듈을 사용할 수 있습니다. MySQL 또는 PostgreSQL과 같은 다른 데이터베이스의 경우 각각의 Python 데이터베이스 드라이버를 설치해야 합니다.

 

필요한 드라이버가 설치되면 적절한 연결 매개변수를 사용하여 데이터베이스에 대한 연결을 설정할 수 있습니다. 다음은 SQLite 데이터베이스에 연결하는 예입니다.

import sqlite3

conn = sqlite3.connect('database.db')

'database.db'를 실제 데이터베이스 파일의 경로로 바꾸십시오. 특정 데이터베이스 구성에 따라 연결 매개변수를 조정하십시오.

 

 

2. Tkinter GUI 프로그램 창 만들기

다음으로 Tkinter를 사용하여 GUI 프레임워크를 만들어 봅시다. 필요한 모듈을 가져오고 기본 창을 초기화합니다.

import tkinter as tk

root = tk.Tk()
root.title("Database GUI")

위의 코드에서 Tkinter를 tk로 가져오고 Tk()를 사용하여 루트 창 인스턴스를 만듭니다. title() 메서드를 사용하여 창의 제목을 "Database GUI"로 설정합니다.

 

 

3. Tkinter GUI 프로그램 창 레이블, 텍스트, 버튼 구성

데이터베이스와 상호 작용하려면 레이블, 입력 필드, 버튼 및 데이터 그리드와 같은 다양한 GUI 구성 요소가 필요합니다. Tkinter는 이를 달성하기 위해 광범위한 위젯을 제공합니다. 일반적으로 사용되는 일부 위젯과 그 기능을 살펴보겠습니다.

  • 레이블: 레이블은 정적 텍스트 또는 정보를 표시하는 데 사용됩니다. 사용자에게 컨텍스트와 지침을 제공합니다. 라벨을 만들려면 Label 위젯을 사용하세요.
label = tk.Label(root, text="Welcome to the Database GUI")
label.pack()

  • 입력 필드: 입력 필드를 통해 사용자가 데이터를 입력할 수 있습니다. 데이터 입력 및 검색에 사용됩니다. 입력 필드를 만들려면 Entry 위젯을 사용하십시오.
entry = tk.Entry(root)
entry.pack()

  • 버튼: 버튼은 동작이나 이벤트를 트리거하는 데 사용됩니다. 클릭하면 기능이나 메서드를 실행할 수 있습니다. 버튼을 만들려면 Button 위젯을 사용하십시오.
def button_clicked():
    # Perform desired action here
    pass

button = tk.Button(root, text="Submit", command=button_clicked)
button.pack()

  • 데이터 그리드: 데이터 그리드 또는 테이블은 데이터베이스 레코드를 표시하고 조작하는 데 사용됩니다. Tkinter는 내장 데이터 그리드 위젯을 제공하지 않지만 고급 데이터 그리드 기능을 위해 tkinter.ttk.Treeview 또는 tkinter.ttk.Treeview와 같은 타사 라이브러리를 사용할 수 있습니다.

 

 

4. 데이터베이스 작업 구축

GUI 프레임워크가 준비되면 데이터베이스 작업을 GUI 구성 요소에 통합할 수 있습니다. 다음은 구현할 수 있는 몇 가지 필수 데이터베이스 작업입니다.

  • 데이터 가져오기: 데이터베이스에서 데이터를 가져오려면 쿼리 또는 SQL 문을 사용할 수 있습니다. 쿼리 기준을 입력하는 입력 필드와 검색을 트리거하는 버튼을 만듭니다.
def fetch_data():
    query = entry.get()  # Get query from entry field
    # Execute query and display results

fetch_button = tk.Button(root, text="Fetch Data", command=fetch_data)
fetch_button.pack()

  • 데이터 삽입: 데이터베이스에 새 데이터를 추가하려면 레코드 세부 정보를 입력할 입력 필드와 삽입을 실행하는 버튼을 만듭니다.
def insert_data():
    data = {
        'name': name_entry.get(),
        'email': email_entry.get()
    }
    # Execute INSERT query with the provided data

name_entry = tk.Entry(root)
name_entry.pack()

email_entry = tk.Entry(root)
email_entry.pack()

insert_button = tk.Button(root, text="Insert Data", command=insert_data)
insert_button.pack()

  • 데이터 업데이트: 기존 데이터를 수정하려면 레코드 세부 정보를 입력할 입력 필드와 업데이트를 실행하는 버튼을 만듭니다.
def update_data():
    data = {
        'name': name_entry.get(),
        'email': email_entry.get()
    }
    # Execute UPDATE query with the provided data

update_button = tk.Button(root, text="Update Data", command=update_data)
update_button.pack()

  • 데이터 삭제: 데이터베이스에서 레코드를 제거하려면 레코드 식별자를 입력할 입력 필드와 삭제를 실행하는 버튼을 만듭니다.
def delete_data():
    record_id = id_entry.get()
    # Execute DELETE query with the provided record_id

id_entry = tk.Entry(root)
id_entry.pack()

delete_button = tk.Button(root, text="Delete Data", command=delete_data)
delete_button.pack()

 

 

5. 확장 기능 및 개선 사항

GUI를 개선하여 더욱 강력한 사용자 경험을 제공하기 위해서는 다음 추가 기능을 구현할 수 있습니다.

  • 데이터 검증: 데이터베이스 작업을 실행하기 전에 데이터의 무결성과 일관성을 보장하기 위해 사용자 입력을 검증합니다. 이를 위해서는 입력한 데이터가 올바른 형식으로 이루어졌는지, 모든 필수적인 정보가 입력되었는지 등을 확인하는 과정이 필요합니다. 이를 통해 데이터베이스 작업이 무결하게 실행될 수 있습니다.
  • 오류 처리: 데이터베이스 관련 예외를 처리하고 사용자에게 의미 있는 오류 메시지를 표시하는 오류 처리 메커니즘을 구현합니다. 이를 위해서는 어떠한 예외 상황이 발생했을 때 적절한 메시지를 사용자에게 전달할 수 있도록 구현해야 합니다. 또한, 예외 상황이 발생한 경우 해당 상황에 대한 처리 방법을 안내하거나 대안을 제시함으로써 사용자들의 불편을 최소화할 수 있습니다. 이를 통해 사용자들은 더욱 원활한 경험을 얻을 수 있습니다.
  • 데이터 시각화: Matplotlib 또는 Plotly와 같은 데이터 시각화 라이브러리를 통합하여 검색된 데이터를 기반으로 차트, 그래프 또는 보고서를 생성합니다.
  • 고급 위젯: 향상된 사용자 상호 작용을 위해 체크 버튼, 라디오 버튼, 콤보 상자 또는 슬라이더와 같은 고급 Tkinter 위젯을 활용합니다.
  • 메뉴 옵션: 데이터 내보내기, 데이터 가져오기 또는 데이터베이스 설정 구성과 같은 추가 기능을 제공하는 메뉴를 만듭니다.

 

 

6. 예제 프로그램 코드

  1. tkinter와 ttk 모듈을 사용하여 GUI를 생성합니다.
  2. sqlite3 모듈을 사용하여 SQLite 데이터베이스에 연결하고, **users**라는 이름의 테이블을 생성합니다.
  3. GUI 요소로는 레이블, 입력 필드, 버튼 및 트리뷰(Treeview)가 있습니다.
  4. 데이터 입력 버튼(Insert Data)을 클릭하면, 이름과 이메일을 가져와서 데이터베이스에 새로운 레코드로 추가합니다.
  5. 데이터 업데이트 버튼(Update Data)을 클릭하면, 선택된 트리뷰 레코드의 ID를 가져와서 해당 레코드의 이름과 이메일을 업데이트합니다.
  6. 데이터 삭제 버튼(Delete Data)을 클릭하면, 선택된 트리뷰 레코드의 ID를 가져와서 해당 레코드를 데이터베이스에서 삭제합니다.
  7. 트리뷰(Treeview)는 데이터베이스에서 가져온 레코드를 표시하는 데 사용됩니다.
  8. 데이터 새로고침 함수(refresh_data)는 트리뷰에 표시된 데이터를 업데이트하여 최신 데이터를 보여줍니다.
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import tkinter as tk
from tkinter import ttk
import sqlite3
 
# Database Connection
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
 
# Create table if it doesn't exist
cursor.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        email TEXT NOT NULL
    )
""")
conn.commit()
 
# GUI Framework
root = tk.Tk()
root.title("Database GUI")
 
# Label
label = tk.Label(root, text="Welcome to the Database GUI")
label.pack()
 
# Entry Fields
name_entry = tk.Entry(root)  # Entry field for name
name_entry.pack()
 
email_entry = tk.Entry(root)  # Entry field for email
email_entry.pack()
 
# Buttons
def insert_data():
    name = name_entry.get()
    email = email_entry.get()
 
    if name and email:  # Check if both name and email are entered
        # Execute INSERT query
        cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", (name, email))
        conn.commit()
        print("Data inserted successfully!")
        refresh_data()  # Refresh the data in the GUI
    else:
        print("Please enter both name and email.")
 
insert_button = tk.Button(root, text="Insert Data", command=insert_data)
insert_button.pack()
 
def update_data():
    name = name_entry.get()
    email = email_entry.get()
 
    if name and email:  # Check if both name and email are entered
        # Get the selected record ID from the treeview
        selected_item = treeview.focus()
        record_id = treeview.item(selected_item)['values'][0]
 
        # Execute UPDATE query
        cursor.execute("UPDATE users SET name=?, email=? WHERE id=?", (name, email, record_id))
        conn.commit()
        print("Data updated successfully!")
        refresh_data()  # Refresh the data in the GUI
    else:
        print("Please select a record and enter both name and email.")
 
update_button = tk.Button(root, text="Update Data", command=update_data)
update_button.pack()
 
def delete_data():
    # Get the selected record ID from the treeview
    selected_item = treeview.focus()
    record_id = treeview.item(selected_item)['values'][0]
 
    # Execute DELETE query
    cursor.execute("DELETE FROM users WHERE id=?", (record_id,))
    conn.commit()
    print("Data deleted successfully!")
    refresh_data()  # Refresh the data in the GUI
 
delete_button = tk.Button(root, text="Delete Data", command=delete_data)
delete_button.pack()
 
# Treeview
treeview = tk.ttk.Treeview(root, columns=('ID''Name''Email'), show='headings')
treeview.heading('ID', text='ID')
treeview.heading('Name', text='Name')
treeview.heading('Email', text='Email')
treeview.pack()
 
def refresh_data():
    # Clear the existing data in the treeview
    treeview.delete(*treeview.get_children())
 
    # Fetch all records from the database
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
 
    # Insert the fetched records into the treeview
    for row in rows:
        treeview.insert('''end', values=row)
 
# Refresh the data initially
refresh_data()
 
root.mainloop()
 
cs

이 코드를 실행하면 데이터베이스 GUI 창이 열리고, 이름과 이메일을 입력하고 데이터를 추가, 업데이트, 삭제할 수 있습니다. 트리뷰(Treeview)에는 데이터베이스의 모든 레코드가 표시되며, 데이터베이스의 내용이 변경되면 자동으로 업데이트됩니다.

 

실행화면

 

 

 

7. 결론 및 의견

Python Tkinter를 사용하여 sqlite3 데이터베이스용 그래픽 사용자 인터페이스를 구축하는 과정을 살펴보았습니다. 위에서 설명한 추가 기능을 추가하면 원하는 사무 자동화 프로그램을 구축할 수 있습니다. 

 

 

[관련글]

[정보 및 유용한 팁] - 챗GPT 란? (CHAT GPT 사용)

 

챗GPT 란? (CHAT GPT 사용)

챗GPT 란 무엇일까요? 요즘 너무 핫하다 못해 마치 옆에 있는 선생님처럼 느껴지는 이 인공지능 AI에 대해서 이해하기 쉽게 정리하려 합니다. 결론적으로 챗GPT에게 질문을 하면, 형식적인 답이 아

2toy.net

[파이썬 (pythoon)] - PyQt QWebEngineView 웹 브라우저 만들기

 

PyQt QWebEngineView 웹 브라우저 만들기

QWebEngineView는 PyQt 활용을 통해 파이썬 언어를 Qt toolkit을 사용할 수 있도록 하는 모듈입니다. Qt toolkit을 사용하면 GUI 애플리케이션을 만들 수 있습니다. 이번에는 PyQt QWebEngineView 웹 브라우저 만들

2toy.net

[파이썬 (pythoon)] - Python Tkinter Canvas 사용법 및 예제

 

Python Tkinter Canvas 사용법 및 예제

Tkinter를 사용하면 다양한 위젯을 만들 수 있고, 이 중 캔버스는 그래픽을 그릴 수 있는 영역을 제공합니다. 캔버스는 그림판과 유사한 기능을 가지고 있어서 그림 그리기, 다이어그램 만들기, 게

2toy.net

[파이썬 (pythoon)] - python requests 정리 및 네이버 뉴스 크롤링 예제

 

python requests 정리 및 네이버 뉴스 크롤링 예제

Python은 인터넷에서 정보를 가져오기 위한 다양한 패키지들을 제공하고 있습니다. 이 중에서 requests 라이브러리는 HTTP 요청을 보내고 받을 수 있는 기능을 제공하여 웹 크롤링, API 호출 및 웹 서

2toy.net

[파이썬 (pythoon)] - Python Tkinter를 이용한 텍스트 편집기(Text Editor) 만들기

 

Python Tkinter를 이용한 텍스트 편집기(Text Editor) 만들기

파이썬 GUI 툴킷인 Tkinter는 Python과 함께 제공되며 사용자 친화적이고 효율적인 대화형 애플리케이션을 만들 수 있는 방법을 제공합니다. 이번 글에서는 Python Tkinter를 사용하여 텍스트 편집기(text

2toy.net

 

반응형