안녕하세요. 각 각 접속정보 테이블을 조회해서 순차적으로 해당 디비에 접속을 해서 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
파이썬은 잘 모르지만...
반복문(for) 안에서 update 하는 부분을 try 로 감싸서 예외처리 해야 하지 않을까요?
한번 해보고 댓글 달겠습니다 마농님~!!! 감사합니다~!!