반응형
[MariaDB] 마리아DB PYTHON - 파이썬과 MariaDB 연계 (MySQL)
파이썬에서 마리아DB에 연결을 하기 위해서는 pymysql을 설치해야 합니다.
pip install pymysql
파이썬에서 MariaDB 연결부터 종료까지의 단계는 아래와 같습니다.
- MariaDB 연결: 연결자이름=pymysql.connect(연결옵션)
- 커서생성: 커서이름=연결자이름.cursor()
- SQL문 실행: 커서이름.execute("SQL문장")
- 데이터저장: 연결자이름.commit()
- MariaDB 연결종료: 연결자이름.close()
먼저 MariaDB에서 sql문으로 pythonDB 생성
DROP DATABASE IF EXISTS pythonDB;
CREATE DATABASE pythonDB;
파이썬에서 MariaDB에 연결하고 테이블 생성
import pymysql # pymysql 임포트
# 전역변수 선언부
conn = None
cur = None
sql=""
# 메인 코드
conn = pymysql.connect(host='MariaDB서버 IP', user='root', password='1234', db='pythonDB', charset='utf8') # 접속정보
cur = conn.cursor() # 커서생성
sql = "CREATE TABLE IF NOT EXISTS userTable (id char(4), userName char(10), email char(15), birthYear int)" # 실행할 sql문
cur.execute(sql) # 커서로 sql문 실행
conn.commit() # 저장
conn.close() # 종료
HeidiSQL로 테이블이 정상 생성 됐는지 확인해 봅니다.
파이썬으로 입력받는 값들을 테이블의 데이터로 입력하는 프로그램
import pymysql # pymysql 임포트
# 전역변수 선언부
conn = None
cur = None
data1 = ""
data2 = ""
data3 = ""
data4 = ""
sql=""
# 메인 코드
conn = pymysql.connect(host='MariaDB서버 IP', user='root', password='1234', db='pythonDB', charset='utf8')
cur = conn.cursor()
while (True) : # brack를 만날때까지 계속 반복
data1 = input("사용자 ID를 입력하세요(엔터 클릭 시 종료): ") # data1변수에 ID 입력받기
if data1 == "" : # 만약 data1에 아무값도 입력받지 않는다면
break; # break;로 while문을 떠남
data2 = input("사용자 이름을 입력하세요: ")
data3 = input("사용자 이메일을 입력하세요: ")
data4 = input("사용자 출생연도를 입력하세요: ")
sql = "INSERT INTO userTable VALUES('" + data1 + "','" + data2 + "','" + data3 + "'," + data4 + ")" # sql변수에 INSERT SQL문 입력
cur.execute(sql) # 커서로sql 실행
conn.commit() # 최종 저장
conn.close() # 접속 종료
AAA, BBB, CCC 데이터를 입력합니다. 마지막엔 엔터로 반복문을 벗어납니다.
HeidiSQL로 테이블 데이터가 정상 입력 됐는지 확인해 봅니다.
파이썬에서 저장된 데이터를 변수로 받아 출력하는 프로그램
import pymysql # pymysql 임포트
# 전역변수 선언부
conn = None
cur = None
data1 = ""
data2 = ""
data3 = ""
data4 = ""
row = None # 테이블의 행을 받아줌
# 메인 코드
conn = pymysql.connect(host='MariaDB서버 IP', user='root', password='1234', db='pythonDB', charset='utf8')
cur = conn.cursor()
cur.execute("SELECT * FROM userTable") # sql 변수 없이 SQL문을 직접 입력후 커서로 실행
print("사용자ID 사용자이름 이메일 출생연도")
print("----------------------------------------------------")
while (True) : # 반복실행
row = cur.fetchone() # row에 커서(테이블 셀렉트)를 한줄 입력하고 다음줄로 넘어감
if row== None : # 커서(테이블 셀렉트)에 더이상 값이 없으면
break # while문을 빠져나감
data1 = row[0]
data2 = row[1]
data3 = row[2]
data4 = row[3]
print("%5s %15s %15s %d" % (data1, data2, data3, data4))
conn.close()
테이블을 입력하고 조회하는 윈도우 프로그램 (GUI 프로그램)
import pymysql
from tkinter import *
from tkinter import messagebox
## 함수 선언부
# btnInsert 클릭 시 호출되는 함수
def insertData() :
con, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
sql=""
conn = pymysql.connect(host='MariaDB서버 IP', user='root', password='1234', db='pythonDB', charset='utf8')
cur = conn.cursor()
data1 = edt1.get()
data2 = edt2.get()
data3 = edt3.get()
data4 = edt4.get()
# entry(한줄텍스트박스)로 입력받은 값을 data 변수들에 입력
try : # 예외처리 시작
sql = "INSERT INTO userTable VALUES('" + data1 + "','" + data2 + "','" + data3 + "'," + data4 + ")"
cur.execute(sql)
except : # 에러발생 시 작동
messagebox.showerror('오류', '데이터 입력 오류가 발생함')
else : # 에러 없을 시 작동
messagebox.showinfo('성공', '데이터 입력 성공')
conn.commit()
conn.close()
# btnSelect 클릭 시 호출되는 함수
def selectData() :
strData1, strData2, strData3, strData4 = [], [], [], []
conn = pymysql.connect(host='MariaDB서버 IP', user='root', password='1234', db='pythonDB', charset='utf8')
cur = conn.cursor()
cur.execute("SELECT * FROM userTable")
strData1.append("사용자ID")
strData2.append("사용자이름")
strData3.append("이메일")
strData4.append("출생연도")
strData1.append("-----------")
strData2.append("-----------")
strData3.append("-----------")
strData4.append("-----------")
# strData에 위에 값들을 먼저 추가
while (True) :
row = cur.fetchone() # 위에서 커서 실행으로 셀렉트한 테이블값을 한줄씩 row에 입력 후 다음줄로
if row== None :
break;
strData1.append(row[0]) # 리스트 strData1에 테이블 셀렉트한 첫번째 값 row[0] 입력
strData2.append(row[1])
strData3.append(row[2])
strData4.append(row[3])
listData1.delete(0,listData1.size() - 1) # 리스트박스에 있는 값들을 모두 지워버림
listData2.delete(0,listData2.size() - 1)
listData3.delete(0,listData3.size() - 1)
listData4.delete(0,listData4.size() - 1)
for item1, item2, item3, item4 in zip(strData1, strData2, strData3, strData4 ): #item에 strData들을 한줄씩 입력
listData1.insert(END, item1) # 리스트박스 마지막줄에 item 값들을 넣어줘서 보여
listData2.insert(END, item2)
listData3.insert(END, item3)
listData4.insert(END, item4)
conn.close()
## 메인 코드부
window = Tk()
window.geometry("600x300")
window.title("GUI 데이터 입력")
edtFrame = Frame(window);
edtFrame.pack()
listFrame = Frame(window)
listFrame.pack(side = BOTTOM,fill=BOTH, expand=1)
edt1= Entry(edtFrame, width=10)
edt1.pack(side=LEFT,padx=10,pady=10)
edt2= Entry(edtFrame, width=10)
edt2.pack(side=LEFT,padx=10,pady=10)
edt3= Entry(edtFrame, width=10)
edt3.pack(side=LEFT,padx=10,pady=10)
edt4= Entry(edtFrame, width=10)
edt4.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=LEFT,fill=BOTH, expand=1)
listData2 = Listbox(listFrame,bg = 'yellow')
listData2.pack(side=LEFT,fill=BOTH, expand=1)
listData3 = Listbox(listFrame,bg = 'yellow')
listData3.pack(side=LEFT,fill=BOTH, expand=1)
listData4 = Listbox(listFrame,bg = 'yellow')
listData4.pack(side=LEFT,fill=BOTH, expand=1)
window.mainloop()
반응형
'MariaDB' 카테고리의 다른 글
[MariaDB] 마리아DB Node.js - 노드.js MariaDB 연계 (MySQL) (0) | 2020.11.29 |
---|---|
[MariaDB] 마리아DB PHP - PHP와 MariaDB를 이용한 이용자 관리 시스템 (MySQL) (8) | 2020.10.20 |
[MariaDB] 마리아DB PHP - PHP와 MariaDB 연계 (MySQL) (0) | 2020.10.19 |