PostgreSQL – 파이썬으로 select and copy 구현 – executemany()
파이썬 라이브러리 psycopg2 를 이용해서 select 구문으로 읽은 데이터를 insert 구문으로 복사해서 넣는 아주 무식한 동작을 해보자. psql 쿼리로 연속적인 대량의 데이터를 처리하는 경우, 그냥 executemany 를 써서 편리하게 이용했다. 간단한 executemany 예제를 볼까?
executemany 예제
사실 이런 예제는 다른 2개의 database 사이에 데이터를 옮길때나 필요하지 쓸일이 없는 것 같긴한데, 많이 쓰니깐 이런 기능이 있었겠지. 암튼
- connection 과 cursor 를 각각 소스와 목적지에 맞게 맞춰두고, 먼저 소스에서 SELECT 구문으로 읽어드린다.
- 이때, 원하는 필드를 순서대로 지정하는 것이 좋다. 넣을때 그대로 넣으면 되니깐
- fetchall() 기능으로 읽을 결과를 리스트에 저장하고,
- 목적지에다가 executemany() 를 통해 일괄 넣어 버린다.
# worktimelog 정보는 아래에 추가for orderitem_id in orderitem_id_list: postgreSQL_select_Query = """SELECT updated_at, created_at, jigcount, jigmanager_id, orderitem_id FROM testxapi_worktimelog WHERE orderitem_id=%s ORDER BY id ASC""" cur_dev_db.execute(postgreSQL_select_Query, (orderitem_id,)) mobile_records = cur_dev_db.fetchall() # 대상 테이블에 추가 sql_insert_query = """ INSERT INTO testxapi_worktimelog (updated_at, created_at, jigcount, jigmanager_id, orderitem_id) VALUES (%s,%s,%s,%s,%s) RETURNING id""" result = cur_final_db.executemany(sql_insert_query, mobile_records) con_final_db.commit()
기초 참고 예제
아래 사이트에서 기본을 배우면 더 쉽게 코드를 이해할 수 있습니다. 위 코드는 아래 사이트에서 예제를 가져다가 수정한 것입니다.
- https://pynative.com/python-postgresql-select-data-from-table/
- https://pynative.com/python-postgresql-insert-update-delete-table-data-to-perform-crud-operations/
성능개선
아래 링크를 읽고 좀 반성. 1회성 일이라 그냥 해 버렸는데 실시간 활용이 필요한 경우 아래 글을 참고하세요.