-
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 connSelect 사용시
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 contentsselect은 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 stclass 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 resultfrom 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