-
Python 기초 공부 - 5 (mariaDB 연동)Programming/Python 2021. 3. 7. 14:30반응형
Maria DB연동 진행
연결 방법
import pymysql def sql_connect(): conn = pymysql.connect(host='localhost', # host 주소 입력 ip주소 user='username', # db에 접근할 user id port=8888, # host의 port번호 password='password', # 비밀번호 db='dbname', # 접속할 DB이름 charset='utf8mb4', use_unicode=True, cursorclass=pymysql.cursors.DictCursor) return conn
Select 사용시
def select(date): conn = sql_connect() cur = conn.cursor() sql ="""SELECT * FROM Connection_ip where date>= (%s)""" # 쿼리문 입력 '%s' 적으면 동적으로 변경가능 cur.execute(sql, '%s'%(date)) # 쿼리문 db로 전달 row = cur.fetchall() # 결과값 반환 contents = [] for pet in row: # 결과 값을 언팩 후 values들만 입력 pet_val = list(pet.values()) contents.append(pet_val) conn.close() return contents
select은 sql 자체내에서 결과를 확인하기 보다는 결과 값을 받아와서 pandas로 처리하면 편하기에 python을 연동해서
사용하는 것을 추천합니다.
그리고 사용이 끝나면 close() 메서드를 이용해서 연결을 해제합니다.
Insert 사용시
def insert(name,email,text,ip,date): conn = sql_connect() cur = conn.cursor() sql ="""INSERT INTO inquire (name, email, text, IP_address, mmdd) VALUES(%s, %s, %s, %s, %s)""" cur.execute(sql, ('%s'%(name), '%s'%(email),'%s'%(text), '%s'%(ip), '%s'%(date))) cur.commit() conn.close() # 커넥트 해제
select과는 다르게 commit() 메서드를 이용하셔야 db내에선 저장을 합니다.
안하면 입력 후 종료와 동시에 사라집니다.
INTO = 중복없음
ignore INTO = 중복가능
Update
def update(before,after): conn = sql_connect() cur = conn.cursor() sql = 'update inquire set name=%s where name = %s' cur.execute(sql, ('%s'%(before), '%s'%(after))) cur.commit() conn.close() # 커넥트 해제
업데이트 또한 간단하게 작성이 가능합니다.
Delete
def delete(name,who): conn = sql_connect() cur = conn.cursor() sql = 'delete from inquire where %s=%s' cur.execute(sql, ('%s'%(name), '%s'%(who))) cur.commit() conn.close() # 커넥트 해제
# 그외 학생 테이블 구축
import pymysql class Student: def __init__(self): self.bunho=0 self.name='' self.kor=0 self.mat=0 self.eng=0 self.total=0 self.average=0 self.grade='' def inputData(self): self.name=input("이름을 입력하시오") self.kor=eval(input("국어점수:")) self.mat=eval(input("수학점수:")) self.eng=eval(input("영어점수:")) def calc_total_average(self): self.total=self.kor+self.mat+self.eng self.average=round(self.total/3,2) self.grade = self.calcSemGrade() def calcSemGrade(self): if self.average>=90: return "A" elif self.average>=80: return "B" elif self.average>=70: return "C" elif self.average>=60: return "D" else: return "F" def __str__(self): return '%5s %5s %6s %6s %6s %7s %7s %s' % (self.bunho, self.name, self.kor, self.mat,self.eng,self.total, self.average, self.grade) def __cmp__(self,other): return self.name == other.name def __call__(self,other): # 클래스를 함수처럼 사용하고자할때 오버라이딩. st = [] for student in other: stp = Student() stp.name=student[0] stp.kor=student[1] stp.eng=student[2] stp.mat=student[3] st.append(stp) return st
class maria: schoolname = "school" def __init__(self): self.conn = pymysql.connect(host='localhost', port=3306, user='root', password='root',db='school', charset='utf8', autocommit=True) cor = self.conn.cursor() cor.execute("SHOW TABLES") tables = cor.fetchall() c = [] for i in tables: if i == ('sungjuk',): c.append(i) if len(c) != 0: sungjuk_table = "SELECT * FROM sungjuk" cor.execute(sungjuk_table) print('테이블이 있습니다. ') else: cor.execute("CREATE TABLE sungjuk (name VARCHAR(20), kor INTEGER(20), mat INTEGER(20),eng INTEGER(20))") print('sungjuk테이블을 생성하였습니다. ') def __del__(self): self.conn.close() def selectdb(self ): cur = self.conn.cursor() cur.callproc("sungjuk_select") if (cur.rowcount): stu = list(cur.fetchall()) else : stu = 0; cur.close() return stu def insertdb(self,name, kor, mat, eng): cur = self.conn.cursor() args = (name, kor, mat, eng) cur.callproc("sungjuk_insert",args) cur.close() def updatedb(self, in_name, up_name): cur = self.conn.cursor() args = (in_name, up_name, 0) cur.callproc("sungjuk_update", args) cur.execute('SELECT @_sungjuk_update_2') result = cur.fetchone() if result==2 : print("수정할 이름이 없습니다.") else : print("성공적으로 수정하였습니다. ") cur.close() return result def deletedb(self,in_name): cur = self.conn.cursor() args = (in_name, 0) cur.callproc("sungjuk_delete", args) cur.execute('SELECT @_sungjuk_delete_1') result = cur.fetchone() if result==2 : print("삭제할 이름이 없습니다.") else : print("성공적으로 삭제하였습니다. ") cur.close() return result
from math import * from statistics import * class Management: def __init__(self): self.maria = maria() def M_select(self): data = self.maria.selectdb() st = [] if (data): for student in data: stp = Student() stp.bunho = student[0] stp.name = student[1] stp.kor = student[2] stp.eng = student[3] stp.mat = student[4] stp.total = student[5] stp.average = student[5] st.append(stp) # studdata=Student((data)) print(maria.schoolname + " 성적 계산표 ") print('%5s %5s %6s %6s %6s %6s %6s %6s' % ('번 호', '이 름', '국 어', '수 학', '영 어', '총 점', '평 균', '학 점' )) for stud in st: print( stud) else : print("데이터가 없습니다. . ") def M_insert(self): stu = Student() stu.inputData() self.maria.insertdb(stu.name, stu.kor, stu.mat, stu.eng) def M_update(self): name = input("검색할 이름을 입력하시요") replace_name = input("수정할 이름을 입력하시요") result=self.maria.updatedb(name, replace_name) def M_delete(self): name = input("검색할 이름을 입력하시요") self.maria.deletedb(name)
import pymysql import sys class Menu(): def __init__(self): self.manage = Management() def work(self): menu = [ "전체검색(1), 입력(2), 수정(3), 삭제(4), 종료(9)"] manage = Management() while 1: sel = input(menu) if sel == "1": manage.M_select() continue elif sel == "2": manage.M_insert() continue elif sel =="3": manage.M_update() continue elif sel =="4": manage.M_delete() elif sel =="9": del(manage) sys.exit() else : print("잘못된 입력입니다. 다시입력 하시요") continue menu = Menu() menu.work()
반응형'Programming > Python' 카테고리의 다른 글
Python 기초 공부 - 8 (Pandas,numpy) (0) 2021.03.09 Python 기초 공부 - 6 (Pandas) (0) 2021.03.08 Python 기초 공부 - 4 (0) 2021.03.06 Python 기초 공부 - 3 (0) 2021.03.05 Python 기초 공부 - 2 (0) 2021.03.04