(데이터 분석)파이썬 -오라클 연동 데이터 핸들링

    728x90

     

    함수 정의 (insert, update, delete)

    import cx_Oracle as cx
    # API = 패키지  --- 라이브러리
    
    # conn = cx.connect("ai","0000","127.0.0.1:1521/XE")
    # if bool(conn):
    #     print("연결성공")
    # else:
    #     print("연결실패")
    #
    # cur = conn.cursor() #커서로 데이터 접근가능
    # cur.execute("select * from emp") #emp 데이터 가져와라 (SQL문)
    # for c in cur:
    #     print(c) #() 튜플 : 수정,삭제 불가
    #
    # cur.close() #커넥션 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
    # conn.close()
    
    #------------------------------------------------------------
    
    #---------------------------------------------------------------
    def my_select(ename=None): #줘도그만 안줘도그만 None
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        if bool(conn):
            print("연결성공")
        else:
            print("연결실패")
    
        cur = conn.cursor()  # 커서로 데이터 접근가능
    
        if bool(ename):
            sql = f"select * from emp where ename='{ename}'"  # emp 데이터 가져와라 (SQL문)
        else:
            sql = "select * from emp"
        cur.execute(sql)
    
        for c in cur: #커서는 한줄씩 가져옴(for문을 통해서 전체 출력가능)
            print(c)  # () 튜플 : 수정,삭제 불가
    
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.close()
    
    #------------------------------호출---------------------
    # my_select('KING')
    # my_select()
    
    
    def my_insert(empno, ename=None, deptno=None):
    
        sql = """insert
                 into emp(empno, ename, deptno)
                 values(:empno, :ename , :deptno)"""
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.execute(sql,[empno, ename, deptno])
        #cur.execute(sql,{"empno":empno, "ename":ename, "deptno":deptno})
        conn.commit()
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.close()
    
    def my_insert2(empno, ename=None, deptno=None): #추천
    
        sql = """insert
                 into emp(empno, ename, deptno)
                 values(:1, :2 , :3)"""#바인딩값 숫자로 표시
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.execute(sql,[empno, ename, deptno])
        #cur.execute(sql,{"empno":empno, "ename":ename, "deptno":deptno})
        conn.commit()
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.close()
    
    def my_insert_many(emp_list):
    
        sql = """insert
                 into emp(empno, ename, deptno)
                 values(:1, :2 , :3)"""
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.executemany(sql, emp_list)
        conn.commit()
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.close()
    
    def my_update(deptno,empno): #추천
    
        sql = """update emp
                set sal=sal+1000, deptno=:1
                where empno=:2"""#바인딩값 숫자로 표시
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.execute(sql,[deptno, empno])
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.commit()
        conn.close()
    def my_update3(list): #추천
    
        sql = """update emp
                set sal=sal+1000, deptno=:1
                where empno=:2"""#바인딩값 숫자로 표시
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.executemany(sql,[list])
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.commit()
        conn.close()
    
    ##오라클상에서 데이터핸들링을 할때 커밋을 반드시 해주어야 파이썬에서 작동된다
    def my_delete(deptno): #추천
    
        sql = """delete from emp
                 where deptno=:1"""#바인딩값 숫자로 표시
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.execute(sql,[deptno])
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.commit()
        conn.close()
    def my_delete2(empno1,empno2,empno3): #추천
    
        sql = """delete from emp
                 where empno in (:1, :2, :3)"""#바인딩값 숫자로 표시
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.execute(sql,[empno1,empno2,empno3])
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.commit()
        conn.close()
    def my_delete3(list): #추천
    
        sql = """delete from emp
                 where empno =:1"""#바인딩값 숫자로 표시
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.executemany(sql,list)
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.commit()
        conn.close()
    
    #---------------------------------------------------------------------

    함수 Import 

    from pkg import oracle_test
    
    #oracle_test.my_select()
    #oracle_test.my_select('KING')
    
    # emp_list=[[551,'ccc1',10],[552,'ccc2',10],[553,'ccc3',10]]
    #
    # oracle_test.my_insert_many(emp_list)
    #oracle_test.my_insert2('7775','ddd',20)
    #oracle_test.my_update(20,7902)
    #list=[30,7369]
    #oracle_test.my_update3((list))
    #oracle_test.my_delete2(552,553,7777)
    
    List=[[9999],[7776],[7775]]
    oracle_test.my_delete3(List)

     

    퀴즈

    #module name : lec10_oracle_file.py
    #file name :lec10_oracle_file.txt
    import cx_Oracle as cx
    
    
    #quiz1. txt파일의 데이터를 오라클 emp2 테이블에 입력해라
    
    def my_insert(empno, ename=None, job=None, mgr=None, hiredate=None, sal=None,comm=None,deptno=None):
    
        sql = """insert
                 into emp2(empno, ename, job, mgr, hiredate, sal, comm, deptno)
                 values(to_number(:1), :2 , :3, to_number(:4), to_date(:5,'yyyy-mm-dd'),
                  to_number(:6), to_number(:7), to_number(:8))"""
    
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
        cur = conn.cursor()  # 커서로 데이터 접근가능
        cur.execute(sql,list2)
        #cur.execute(sql,{"empno":empno, "ename":ename, "deptno":deptno})
        conn.commit()
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.close()
    
    with open('./lec10_oracle_file.txt','r') as f:
        while True:
             line1 = f.readline()
             list2=line1.split("\t")
             x=list2[-1]
             x=x.replace('\n','')
             list2[-1]=x
             if len(line1)<=0:
                 break
             my_insert(list2)
    
    
    
    #quiz 2. dept 테이블 값을 읽어서 lec10_oracle_file.txt에 써라
    
    
    def my_write(dept):
        conn = cx.connect("ai", "0000", "127.0.0.1:1521/XE")
    
        cur = conn.cursor()  # 커서로 데이터 접근가능
    
        sql = f"select * from {dept}"  # emp 데이터 가져와라 (SQL문)
    
        cur.execute(sql)
    
    
        with open('./lec10_oracle_file.txt', 'a') as w:
            for c in cur:  # 커서는 한줄씩 가져옴(for문을 통해서 전체 출력가능)
                for i in c:
                    w.write(str(i))
                    w.write(" ")
                w.write("\n")
    
        cur.close()  # 커넥션,커서 한번 열었으면 다시 닫아주기 연결 많아지면 오라클 서버 과부화
        conn.close()
    
    my_write('dept')

     

    -- excutemany excute 차이 복습

    댓글