반응형

[MariaDB] 마리아DB PYTHON - 파이썬과 MariaDB 연계 (MySQL)

 

파이썬에서 마리아DB에 연결을 하기 위해서는 pymysql을 설치해야 합니다.

pip install pymysql

 

파이썬에서 MariaDB 연결부터 종료까지의 단계는 아래와 같습니다.

  1. MariaDB 연결: 연결자이름=pymysql.connect(연결옵션)
  2. 커서생성: 커서이름=연결자이름.cursor()
  3. SQL문 실행: 커서이름.execute("SQL문장")
  4. 데이터저장: 연결자이름.commit()
  5. 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()

조회
데이터 입력 후 다시 조회
HeidiSQL에서 입력한 데이터 확인

 

 

[MariaDB] 전체보기

 

'MariaDB' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형