2017-09-22 15 views
0

psychopg2가있는 Python 스크립트를 사용하여 Excel 스프레드 시트를 Postgres DB에 삽입하려고합니다.가변 열 개수가있는 삽입 문을 생성하는 psychopg2

문제는 모든 스프레드 시트의 열 수가 같지 않아서 insert 문이 충분히 유연하여 이름으로 지정할 필요가 없기 때문입니다.

필자의 접근 방식은 스프레드 시트의 헤더 행 열을 튜플에로드하는 것과 마찬가지로 값을 삽입하는 것이다. 따라서 예 :

sql = ''''INSERT INTO my_table (%s) VALUES (%s);''' 
cur.execute(sql, (cols, vals)) 

여기서 'cols'와 'vals'는 둘 다 튜플입니다.

'cols'는 스프레드 시트의 열 수에 따라 7, 9, 10 등의 항목을 가질 수 있습니다. 내가 이것을 실행하려고하면

, 내가 얻을 : 문제가 내 호출 구문, 또는 당신은 단순히 할 수없는 경우에 내가 할 노력하고있어

psycopg2.ProgrammingError: syntax error at or near "'INSERT INTO my_table 
(ARRAY['" 
LINE 1: 'INSERT INTO my_table... 
    ^

확실하지합니다.

답변

0

SQL 쿼리 시작 부분에 어 피어 런트 '이 있습니다. 동적으로 열을 조회하려고 곳 당신을 실현하지 않았다

''''INSERT INTO my_table (%s) VALUES (%s);''' 

'''INSERT INTO my_table (%s) VALUES (%s);''' 

편집해야합니다. 그렇게하려면 텍스트 서식을 사용해야합니다.

sql = '''INSERT INTO my_table ({}) VALUES (%s)'''.format(','.join(cols)) 

이 그런 다음 실행은 다음과 같습니다 :

cur.execute(sql, (vals,)) 
+0

좋은 눈 ... 바보 오타 죄송 cols을 Asuming하는 목록입니다. 제거했지만 오류는 설명 된대로 그대로 유지됩니다. – Mark

+0

그게이 오류를 지나치게 받았다. 감사! – Mark