mssql에서 데이터를 조회하는 방법
데이터베이스에서 데이터를 가져오고, tkinter의 Treeview 위젯을 사용하여 데이터를 테이블 형식으로 표시하는 프로그램을 작성해보도록 하겠습니다.
샘플 프로그램을 만드는 거라서 최대한 간단하게만들었습니다.
먼저 화면은 다음과 같습니다.
주요 기능:
pymssql을 사용하여 MSSQL에 연결합니다.- 쿼리를 사용하여
FirstName에 대한 필터링을 수행합니다. tkinter의Entry위젯으로 필터링할 이름을 입력받습니다.Treeview를 사용하여 데이터를 표시합니다.
먼저, 필요한 라이브러리를 설치해야 합니다.
필요한 라이브러리 설치
pip install pyodbc
소스 코드
아래는 tkinter와 pymssql을 사용하여 MSSQL에서 데이터를 가져와 표시하는 프로그램의 예제 코드입니다.
import tkinter as tk
from tkinter import ttk
import pyodbc
# 데이터베이스에 연결하는 함수
def fetch_data():
# MSSQL 서버에 연결
connInfo = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=.\TIGERSARANG;DATABASE=pyTestDb;UID=xxx;PWD=xxxx;TrustServerCertificate=yes"
conn = pyodbc.connect(connInfo)
cursor = conn.cursor()
# 입력된 FirstName 값으로 필터링
firstname_filter = firstname_entry.get()
query = f"""
SELECT TOP (1000) [id], [FirstName], [LastName], [Gender], [CellNum], [Age]
FROM [pytestDb].[dbo].[CustomerInfo]
WHERE [FirstName] LIKE %s
"""
cursor.execute(query, (f'%{firstname_filter}%',))
# 기존 데이터를 클리어
for row in tree.get_children():
tree.delete(row)
# 가져온 데이터 Treeview에 추가
for row in cursor.fetchall():
tree.insert('', tk.END, values=row)
conn.close()
# 메인 윈도우 생성
root = tk.Tk()
root.title("MSSQL Data Viewer")
root.geometry("800x400")
# FirstName 필터 입력
tk.Label(root, text="FirstName Filter:").pack(pady=5)
firstname_entry = tk.Entry(root)
firstname_entry.pack(pady=5)
# 데이터 조회 버튼
fetch_button = tk.Button(root, text="Fetch Data", command=fetch_data)
fetch_button.pack(pady=5)
# Treeview 위젯 생성 (데이터 표시용)
columns = ('id', 'FirstName', 'LastName', 'Gender', 'CellNum', 'Age')
tree = ttk.Treeview(root, columns=columns, show='headings')
# 컬럼 헤더 설정
for col in columns:
tree.heading(col, text=col)
tree.pack(expand=True, fill='both')
# 프로그램 실행
root.mainloop()
코드 설명
데이터베이스 연결:
pymssql.connect()를 사용하여 MSSQL 서버에 연결합니다. 주어진 연결 문자열을 바탕으로server,database,integrated_security,encrypt,trust_server_certificate를 설정했습니다.
데이터 가져오기 (
fetch_data함수):SELECT쿼리를 사용하여FirstName컬럼에 대해 필터링을 수행합니다. 입력된FirstName값으로 필터링하여 해당하는 데이터를 가져옵니다.fetchall()로 쿼리 결과를 가져온 후,Treeview에 데이터를 삽입합니다.
GUI 구성:
tkinter를 사용하여 간단한 GUI를 생성합니다.Entry위젯을 사용하여FirstName필터를 입력받습니다.Button을 눌러 데이터 조회를 실행하며,Treeview위젯에 데이터를 표시합니다.
Treeview위젯:Treeview위젯을 사용하여 데이터베이스에서 가져온 데이터를 표 형태로 표시합니다.- 각 컬럼의 이름을 설정하고, 쿼리 결과로 가져온 데이터를 삽입합니다.
주의 사항
pymssql을 사용하려면 Python과 MSSQL 서버가 동일한 네트워크 내에 있어야 하며, MSSQL 서버가 연결을 허용하도록 구성되어 있어야 합니다.integrated_security=True를 설정하여 Windows 인증을 사용하도록 하였습니다. 다른 방식의 인증을 사용하려면 연결 문자열의 옵션을 변경하면 됩니다.- 보안 문제로 인해 실제 사용 시에는 입력 값을 검증하고 SQL 인젝션 공격에 대비하는 것이 좋습니다.
요약
- 이 코드는
tkinter와pymssql을 사용하여 MSSQL에서 데이터를 가져와Treeview에 표시하는 예제입니다. FirstName필드를 사용하여 데이터를 필터링하며, 필터링 값을Entry위젯에서 입력받습니다.- 버튼을 눌러 필터링된 데이터를 가져와
Treeview위젯에 표시합니다.