본문 바로가기
파이썬

파이썬 DB기본예제(MySql)

by 가오가이거 2020. 12. 17.
import pymysql
#vo(value object)=dto(data transefer object)
class Test:
    def __init__(self, num=None, name=None, price=None, disc=None):
        self.num = num
        self.name = name
        self.price = price
        self.disc = disc

    def __str__(self):#
        return 'num:'+str(self.num)+' / name:'+self.name+' / price:'+str(self.price)+' / disc:'+self.disc

class Dao:
    def connect(self):
        return pymysql.connect(host='localhost', user='testuser', password='testpw',
                       db='testdb', charset='utf8')

    def select(self, num):
        conn = self.connect()
        sql = 'select * from test where num=%s'
        cursor = conn.cursor()  # 사용할 커서 객체 생성
        cursor.execute(sql, num)  # sql실행. 실행한 결과는 cursor 객체에 담아
        row = cursor.fetchone()#검색 결과 한줄추출
        conn.close()
        if row != None:
            return Test(row[0], row[1], row[2], row[3])

    def selectAll(self):
        conn = self.connect()
        sql = 'select * from test'
        cursor = conn.cursor()  # 사용할 커서 객체 생성
        cursor.execute(sql)  # sql실행. 실행한 결과는 cursor 객체에 담아
        datas = []
        for row in cursor:  # 검색된 결과를 한 줄씩 추출
            datas.append(Test(row[0], row[1], row[2], row[3]))
        conn.close()
        return datas

    def insert(self, t):
        conn = self.connect()
        sql = 'insert into test(name, price, disc) values(%s, %s, %s)'
        cursor = conn.cursor()  # 사용할 커서 객체 생성
        d = (t.name, t.price, t.disc)
        cursor.execute(sql, d)
        conn.commit()  # 쓰기 완료
        conn.close()

    def update(self, t):# 수정할 제품번호와 새 가격을 Test 객체로 받아옴
        conn = self.connect()
        sql = 'update test set price=%s where num=%s'
        cursor = conn.cursor()  # 사용할 커서 객체 생성
        d = (t.price, t.num)
        cursor.execute(sql, d)
        conn.commit()  # 쓰기 완료
        conn.close()

    def delete(self, num):
        conn = self.connect()
        sql = 'delete from test where num=%s'
        cursor = conn.cursor()  # 사용할 커서 객체 생성
        cursor.execute(sql, num)
        conn.commit()  # 쓰기 완료
        conn.close()

class Service:
    def __init__(self):
        self.dao = Dao()

    def addProduct(self):
        print('제품추가')
        name = input('name:')
        price = int(input('price:'))
        disc = input('describe:')
        self.dao.insert(Test(0, name, price, disc))

    def getProduct(self):
        print('제품검색')
        num = int(input('검색할 제품 번호:'))
        p = self.dao.select(num)
        if p==None:
            print('없는 제품 번호')
        else:
            print(p)

    def getAll(self):
        print('전체검색')
        datas = self.dao.selectAll()
        for i in datas:
            print(i)

    def editProduct(self):
        print('제품수정')
        num = int(input('수정할 제품 번호:'))
        p = self.dao.select(num)
        if p == None:
            print('없는 제품 번호. 수정취소')
        else:
            price = int(input('new price:'))
            self.dao.update(Test(num, '', price, ''))

    def delProduct(self):
        print('제품삭제')
        num = int(input('삭제할 제품 번호:'))
        p = self.dao.select(num)
        if p == None:
            print('없는 제품 번호. 삭제취소')
        else:
            self.dao.delete(num)

def main():
    service = Service()
    service.addProduct()
    service.addProduct()
    service.getAll()
    service.editProduct()
    service.editProduct()
    service.getProduct()
    service.delProduct()

main()