[Python] MySQL 연동

is Yoon·2023년 9월 14일
0

Python

목록 보기
17/17

데이터베이스 연동 프로그램 (pymysql)

pymysql 라이브러리 설치 후, MySQL과 연동하는 데이터베이스 연동 프로그램을 작성할 수 있다.

데이터 입력 프로그램

# 1. MySQL 연결하기 : 연결자 = pymysql.connect(연결 옵션)
import pymysql
conn = pymysql.connect(host='서버IP주소', user='사용자', password='암호', db='데이터베이스', charset='utf8')

# 2. 커서 생성하기 : 커서이름 = 연결자.corsor()
cur = conn.cursor()

# 3. 테이블 만들기 : 커서이름.execute("CREATE TABLE ~")
cur.execute("CREATE TABLE table_name (colum1 TYPE, ..)")

# 4. 데이터 입력하기 : 커서이름.execute("INSERT ~")
cur.execute("INSERT INTO table_name VALUES(value, ..)")

# 5. 입력한 데이터 저장하기 : 연결자.commit()
conn.commit()

# 6. MySQL 연결 종료하기 : 연결자.close()
conn.close()
import pymysql

# 전역 변수 선언부
conn, cur = None, None
data1, data2, data3 = "", "", ""
sql = ""

# 메인 코드
conn = pymysql.connect(host='127.0.0.1', user='root', password='0000', db='soloDB', charset='utf8')
cur = conn.cursor()

while (True) :
	data1 = input("사용자 ID : ")
    if data1 == "" :
    	break;
    data2 = input("사용자 이름 : ")
    data3 = input("사용자 이메일 : ")
    sql = "INSERT INTO userTable VALUES('data1', `data2`, data3)"
    cur.execute(sql)

conn.commit()
conn.close()

데이터 출력 프로그램

# 1. MySQL 연결하기 : 연결자 = pymysql.connect(연결 옵션)
# 2. 커서 생성하기 : 커서이름 = 연결자.cursor()
# 3. 데이터 조회하기 : 커서이름.execute("SELECT 문장")
# 4. 조회한 데이터 출력하기 (반복) : 커서이름.fetchone() 
     # fetchone() 한 행씩 접근 or fetchall() 한꺼번에 접근
# 5. MySQL 연결 종료하기 : 연결자.close()
import pymysql

# 전역 변수 선언부
conn, cur = None, None
data1, data2, data3 = "", "", ""
row = None

# 메인 코드
conn = pymysql.connect(host='127.0.0.1', user='root', password='0000', db='soloDB', charset='utf8')
cur = conn.cursor()

cur.execute("SELECT * FROM userTable")   # 조회한 결과를 cur 변수에 저장

print("사용자 ID, 사용자 이름, 사용자 이메일")

while (True) :
	row = cur.fetchone()
    if row == None :
    	break;
    data1 = row[0]
    data2 = row[1]
    data3 = row[2]
    print(data1, data2, data3)

conn.close()






GUI 응용 프로그램 (tkinter)

마우스 클릭만으로 데이터 입력, 조회가 가능하다.

from tkinter import *   # GUI 관련 모듈 제공하는 표준 윈도 라이브러리

root = Tk()   # 기본이 되는 윈도를 반환하여, root 변수에 저장
root.title("윈도 제목")      # 제목 표시
root.geometry("400x200")   # 초기 크기 지정

# 이 부분에 코딩을 추가하여 화면을 구성하고 처리한다.

root.mainloop()   # 이벤트 처리

위젯

  • 윈도에 나오는 버튼, 텍스트, 라디오 버튼, 이미지 등
  • 표시 : pack()
  • 정렬 : pack(side=LEFT|RIGHT|TOP|BOTTOM)
  • 사이 여백 추가 pack(fill=X, padx=10, pady=10)

라벨

  • 형식 : label(부모 윈도, 옵션 ..)
  • 문자를 표현할 수 있는 위젯
label1 = Label(root, text="라벨", font=("Noto Sans KR", 20), bg="black", fg="yellow")

label1.pack()

버튼

  • 형식 : Button(부모 윈도, 옵션 ..)
  • 마우스로 클릭하면 지정한 작업이 실행되도록 사용하는 위젯
  • command 옵션으로 사용자가 버튼을 눌렀을 때 지정한 작업을 처리해야 한다.
def clickButton() :
	messagebox.showinfo('alt 제목', 'alt 내용')

# 메인 코드
button1 = Button(root, text="여기 클릭", fg="blue", bg="red", command=clickButton)
button1.pack(expand = 1)   # 버튼을 화면 중앙에 표현

프레임, 엔트리, 리스트 박스

  • 프레임 : 화면을 여러 구역으로 나눔
  • 엔트리 : 입력 상자를 표현
  • 리스트 박스 : 목록을 표현
# 프레임 구역 나누기
upFrame = Frame(root)
upFrame.pack()
downFrame = Frame(root)
downFrame.pack()

# 입력을 위한 엔트리
editBox = Entru(upFrame, width=10)
editBox.pack(padx=20, pady=20)

# 리스트 박스 나타내기
listbox = Listbox)downFrame, bg="blue")
listbox.pack()

# 리스트 박스에 데이터 입력
listbox.insert(END, "맨 뒤에 첨부하기")






pymysql + tkinter 라이브러리

import pymysql
from tkinter import *
from tkinter import messagebox


## 메인 코드부 1
# 1) 데이터 입력 프로그램
def insertData() :
	conn, cur = None, None
    data1, data2, data3 = "", "", ""
    sql = ""
    
    conn = pymysql.connect(host='127.0.0.1', user='root', password='0000', db='soloDB', charset='utf8')
	cur = conn.cursor()
    
    data1 = edt1.get()
    data2 = edt1.get()
    data3 = edt1.get()
    sql = "INSERT INTO userTable VALUES('" + data1 + "', '" + data2 + "', " + data3 + ")"
    cur.execute(sql)
    
    conn.commit()
    conn.close()
    
    messagebox.showinfo('성공', '데이터 입력 성공')

# 2) 데이터 출력 프로그램
def selectData() :
	strData1, strData2, strData3 = [], [], []
    
    conn = pymysql.connect(host='127.0.0.1', user='root', password='0000', db='soloDB', charset='utf8')
	cur = conn.cursor()
    cur.execute("SELECT * FROM userTable")
    strData1.append("ID")
    strData2.append("name")
    strData3.append("email")
    
    while (True) :
		row = cur.fetchone()
        if row == None :
            break;
        strData1.append(row[0]); strData2.append(row[1]); strData3.append(row[2])
        
    # 일단 화면에서 3개의 리스트 박스를 모두 비운다.
    listData1.delete(0, listData1.size() -1)
    listData2.delete(0, listData1.size() -1)
    listData3.delete(0, listData1.size() -1)
    
    for item1, item2, item3 in zip(strData1, strData2, strData3) :
    	# 각 리스트 박스에 앞에서 준비한 strData1~3까지 값들을 다시 채운다.
        # 결국 화면의 리스트 박스에는 조회된 결과가 모두 출력된다.
    	listData1.insert(END, item1)
        listData2.insert(END, item2)
        listData3.insert(END, item3)
        
    conn.close()
    

## 메인 코드부 2
root = Tk()
root.geometry("400*300")
root.title("완전한 GUI 응용 프로그램")

edtFrame = Frame(root)
edtFrame.pack()
listFrame = Frame(root)
listFrame.pack(side=BOTTOM, fill=BOTH, expand=1)

edt1 = Entry(edtFrame, with=10); edt1.pack(side=LEFT, padx=10, pady=10)
edt2 = Entry(edtFrame, with=10); edt2.pack(side=LEFT, padx=10, pady=10)
edt3 = Entry(edtFrame, with=10); edt3.pack(side=LEFT, padx=10, pady=10)

btnInsert = Button(edtFrame, text="입력", command=insertData)
btnInsert.pack(side=LEFT, padx=10, pady=10)
btnSelect = Button(edtFrame, text="조회", command=selectData)
btnSelect.pack(side=LEFT, padx=10, pady=10)

listData1 = Listbox(listFrame, bg='yellow')
listData1.pack(side=BOTTOM, fill=BOTH, expand=1)
listData2 = Listbox(listFrame, bg='yellow')
listData2.pack(side=BOTTOM, fill=BOTH, expand=1)
listData3 = Listbox(listFrame, bg='yellow')
listData3.pack(side=BOTTOM, fill=BOTH, expand=1)

root.mainloop()
profile
planning design development with data

0개의 댓글