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

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


캡처.PNG (28,464Bytes)

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

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

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

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

도와주세여 ㅠㅠ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입