파이써을 이용한 데이터 수정 관련 질문 드립니다. 0 2 736

by 뜨디 [DB 기타] [2022.02.09 19:07:19]


캡처.PNG (28,464Bytes)

안녕하세요. 각 각 접속정보 테이블을 조회해서 순차적으로 해당 디비에 접속을 해서 update대상 테이블 및 컬럼 업데이트 쿼리 추출 후 순차적으로 update하는 

파이썬 코드를 작성하였는데요. 

첨부한 캡쳐 화면 처럼 한디비에 먼저 접속해서 테이블 리스트를 순차적으로 update하는데 error 발생 시 update가 멈추고 다음 디비로 접속합니다.

제가 원한건 update 에러발생해도 로그만 찍고 다음 테이블을 update 이어서 진행하는건데 pass를 어디다 넣어야할지 모르겠습니다. ㅠㅠ 

도와주세여 ㅠㅠ

        for row in rows_instance :

            my_conn = pymysql.connect(host=row['endpoint'], user=row['user'], password=row['pwd'], db=row['db'], charset='utf8', port=row['port'], connect_timeout=5)
            my_curs = my_conn.cursor()

            db_conn = {'instance_id': row['instance_id'], 'conn': my_conn, 'curs': my_curs, 'use_yn': row['use_yn']}
            db_conns.append(db_conn)

        for conn in db_conns :

            log.info('Start Collecting ::: Instance ID : ' + conn['instance_id'] )

            try :

                conn['curs'].execute(sql_updt_qrylist)
                rows = conn['curs'].fetchall()   # rows에 update값들을 쭉 저장
                rows = list(rows)

                # sql_updt_qrylist 실행하는 부분임
                for row in rows :
                    row = list(row)
                    query = row[0]
                    conn['curs'].execute(query)
                    query = row[1]
                    conn['curs'].execute(query)
                    query = row[2]
                    conn['curs'].execute(query)
                    #row = ''.join(row)
                    # conn['curs'] 함으로써 모듈DB에 접속하여 update를 수행할 수 있음
                    #conn['curs'].execute(row[0],row[1],row[2])

                log.info(rows)
                conn['conn'].commit()
                my_conn_c.commit()


            except Exception as exw :
                log.error("Occured Exception exw ::: \nex ::: %s    \nmsg : %s    \nLast Executed Select SQL ::: %s    \nLast Executed Insert SQL ::: %s",str(exw), str(sys.exc_info()[0]), conn['curs']._last_executed, my_curs_c._last_executed)
                pass

                try:
                    my_conn_c.commit()
                    conn['conn'].commit()
                except Exception as ex3 :
                    pass

                pass


            log.info('End Collecting ::: Instance ID : ' + conn['instance_id'] )

    except Exception as ex :
        log.error("Occured Exception ex ::: ex : %s    msg : %s    Traceback : %s ",str(ex), str(sys.exc_info()[0]), traceback.format_exc() )

    finally :

        try:

            my_conn_c.close()

            for db_conn in db_conns :
                try :
                    db_conn['conn'].close()
                except Exception as exff:
                    pass

        except Exception as exf:
            pass

 

by 마농 [2022.02.09 19:38:21]

파이썬은 잘 모르지만...
반복문(for) 안에서 update 하는 부분을 try 로 감싸서 예외처리 해야 하지 않을까요?


by 뜨디 [2022.02.10 02:02:45]

한번 해보고 댓글 달겠습니다 마농님~!!! 감사합니다~!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입