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
위젯에 표시합니다.