코딩헤딩

[데이터 분석] DB프로그램 예제(class 생성하여 조회/입력/수정 처리) 본문

데이터

[데이터 분석] DB프로그램 예제(class 생성하여 조회/입력/수정 처리)

멈머이 2023. 12. 2. 04:14
728x90
<DB 프로그램 순서>
 1. 데이터베이스 설정 정보 준비
 2. DB 접속하기 : 커넥션(connect)
 3. 커서 받아오기 : cursor()
 4. 구문 작성하기 : sql(조회, 입력, 수정, 삭제) -- xx
 5. 구문 실행하기 : execute() -> 결과값은 체크 --세모
 6. 조회인 경우 커서에서 데이터 추출하기 -- 세모
     -> 한건 : fetchone()
     -> 여러건 : fetchall()
 7. 조회결과 데이터프레임 또는 웹페이지에 출력 -- 세모
     -> 데이터프레임 : pd.DataFrame(여러건), pd.DataFrame([한건])
 8. 조회가 아닌경우 : 처리 결과 조건으로 확인하기 if "처리 성공" else "처리 실패" -- 세모
 9. DB정보 반환하기
    - 반환 순서 : cursor > connect
 
1. 클래스 생성
 - 클래스 이름 : PowerClass
2. 클래스 내에 함수들 정의
3. 외부에서 조회/한건입력/수정/삭제 처리하기

* Class생성

class PowerClass :
    ### 생성자
    # - DB접속정보 정의
    def __init__(self) :
        ### 접속 정보
        # - 접속 ID or 도메인
        self.host = "localhost"
        # - 사용자계정
        self.user = "gjuser"
        # - 패스워드
        self.password = "dbdb"
        # - 데이터베이스명
        self.db = "gjdb"
        # - 한글처리
        self.charset = "utf8"
        # - 조회시 컬럼명을 동시에 보여줄지 여부 설정
        self.cursorclass = pymysql.cursors.DictCursor
        # - 자동반영
        self.autocommit = True

        ### DB 접속하기
        self.initConnection()

        ### Cursor 생성하기
        self.initCursor()

    ### DB 접속하기
    # - 반환값 : connect
    def initConnection(self) :
        ### DB 접속하기
        try :
            self.conn = pymysql.connect(host=self.host,
                                       user=self.user,
                                       password=self.password,
                                       db=self.db,
                                       charset=self.charset,
                                       autocommit=self.autocommit,
                                       cursorclass=self.cursorclass)

            print("DB접속 성공 >>> ", self.conn)
        except :
            print("DB Server Checking...")

    ### 커서 생성하기
    def initCursor(self) :
        self.cur = self.conn.cursor()
        print("커서 생성 성공 >>> ", self.cur)

    ### 구문 실행하기
    def getExecute(self, sql) :
        rs_cnt = self.cur.execute(sql)
        return rs_cnt

    ### 조회-여러건 데이터프레임으로 변환하여 반환하기
    def getSelectAll(self, sql) :
        rs_cnt = self.getExecute(sql)
        if rs_cnt > 0 :
            rows = self.cur.fetchall()
            rs_df = pd.DataFrame(rows)
        else :
            rs_df = False
        return rs_df

    ### 조회-한건 데이터프레임으로 변환하여 반환하기
    def getSelectOne(self, sql) :
        rs_cnt = self.getExecute(sql)
        if rs_cnt > 0 :
            row = self.cur.fetchone()
            rs_df = pd.DataFrame([row])
        else :
            rs_df = False
        return rs_df

    ### DB 접속 정보 반환하기
    def dbClose(self) :
        try :
            self.cur.close()
            self.conn.close()
            print("DB 접속을 종료합니다.")
        except :
            print("이미 DB 접속이 종료되어 있습니다.")

 


* 데이터 여러 건 조회하기

try :
    ### 클래스 생성하기
    pClass = PowerClass()

    ### 조회-여러건
    sql = """
        SELECT mem_id, mem_name
        FROM member
        WHERE NOT EXISTS(SELECT cart_member From cart
        					WHERE cart_member = mem_id)
    """
    ### 여러건 데이터프레임으로 조회하기
    rs_df = pClass.getSelectAll(sql)

except Exception as e:
    print(f"오류발생 : {e}")

finally :
    ### DB정보 반환하기
    pClass.dbClose()

    ### 사용된 클래스 소멸(삭제)시키기
    del pClass

rs_df

 결과 :

 

DB접속 성공 >>>  <pymysql.connections.Connection object at 0x0000021BCA15FD00>

커서 생성 성공 >>> <pymysql.cursors.DictCursor object at 0x0000021BCA15F820>

DB 접속을 종료합니다.

 

 

 

 

 

 

* 데이터 한 건 조회하기

try :
    ### 클래스 생성하기
    pClass = PowerClass()

    ### 조회-한건
    sql = """
        SELECT mem_id, mem_name
        FROM member
        WHERE mem_id = 'a001'
    """

    ### 한건 조회하기
    rs_df = pClass.getSelectAll(sql)
    rs_df = pClass.getSelectOne(sql)


except Exception as e:
    print(f"오류발생 : {e}")

finally :
    ### DB정보 반환하기
    pClass.dbClose()

    ### 사용된 클래스 소멸(삭제)시키기
    del pClass

rs_df

결과 :

DB접속 성공 >>> <pymysql.connections.Connection object at 0x0000021BCA251280>

커서 생성 성공 >>> <pymysql.cursors.DictCursor object at 0x0000021BCA251340>

DB 접속을 종료합니다.

 


* 데이터 입력 조회하기

try :
    ### 클래스 생성하기
    pClass = PowerClass()

    ### 입력을 위한 구문 생성하기
    sql = """
        Insert Into time_power_demand(
            ymd, time, power
        ) Values (
            '2020-12-31', '24시', 1234
        )
    """
    rs_cnt = pClass.getExecute(sql)
    if rs_cnt > 0 :
        print(f"{rs_cnt}건이 입력되었습니다.")
    else :
        print("입력되지 않았습니다.")

except Exception as e:
    print(f"오류발생 : {e}")

finally :
    ### DB정보 반환하기
    pClass.dbClose()

    ### 사용된 클래스 소멸(삭제)시키기
    del pClass

결과 :

DB접속 성공 >>> <pymysql.connections.Connection object at 0x0000021BC9C15A00>

커서 생성 성공 >>> <pymysql.cursors.DictCursor object at 0x0000021BC87F1EE0>

1건이 입력되었습니다.

DB 접속을 종료합니다.

728x90