본문 바로가기
Troubleshooting

Postgres copy_export Error"invalid input syntax for type integer" csv bom에러 해결

by 푸푸망나뇽 2022. 8. 19.
반응형

Error 현상

python 으로 postgres에 연결하여 csv 데이터를 삽입하는 코드를 작성하고 테스트하였는데

 

copy_sql = f"""
    COPY actor
    FROM stdin DELIMITER ',' 
 """


with open(file_name, 'r') as f:
	cur.copy_expert(copy_sql,f)
        conn.commit()

 

아래와 같은 에러가 발생했따.

psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "4"
CONTEXT:  COPY actor, line 1, column actor_id: "4"

엑셀 양식은 아래와 같다.

 

copy 구문이 이상한가 몇일을 구글링을했는데.. 

내 로컬환경은 mac이고 mac에서 해당 엑셀파일을 csv로 저장하여 데이터를 삽입하려고했다.

구글링 결과 ㅜㅜ

엑셀파일 가장앞에  byte order mark 라는 추가적인 문자가 들어가서 int로 인식하지 못하고 계속 str으로 인식한거였다.

 

BOM 확인

줄여서 BOM이 있는지 확인하기 위해서는 아래 커맨드로 확인이 가능하다.

 

$ od -c 엑셀파일.csv

 

BOM 제거

 

1) 터미널

 

# 파일 열기
vi 파일

# nobomb 모드로 설정
:set nobomb

# 저장 후 나가기
:wq

 

2) 파이썬

'utf-8-sig' 로 인코딩하여 파일을 읽으면 된다

with codecs.open(file_name, 'r', encoding='utf-8-sig') as f:
	cur.copy_expert(copy_sql,f)
        conn.commit()

 

 

ㅠㅠ 이것때문에 몇일을 날린건지..ㅠ

반응형

댓글