>source

psycopg2를 사용하여 postgres에 팬더 데이터 프레임을 삽입하고 있습니다. 아래 code :

...
import psycopg2.extras as extras
tuples= [tuple(x) for x in df.to_numpy()]
cols= ','.join(list(colomn_list))
query= "INSERT INTO %s(%s) VALUES (%%s,%%s,%%s,%%s,%%s)" % (table  , cols)
extras.execute_batch(cursor, query, tuples, page_size= 100)
...

이 작품! 여기에서 DF를 튜플로 변환하고 %% s 은 extras.execute_batch가 실행될 때 런타임 에이 값을 가져 오는 것으로 생각합니다.

문제는이 문제에 대해서는 %% s , 열의 횟수를 하드 코딩해야한다는 것입니다. 이 예에서 5 coumns에서는 %% s, %% s, %% s, %% s, %% s 을 사용하고 있습니다.

가변적 인 방법이 있습니까?

여기에 내가 시도한 것입니다 :

...
tuples= [tuple(x) for x in df.to_numpy()]
cols= ','.join(list(colomn_list))
vals_frame= len(colomn_list) * """%%s,"""
vals_frame= vals_frame[:-1]
print('vals_frame: ',vals_frame)
query= query= "INSERT INTO %s(%s) VALUES("+vals_frame+")" % (table  , cols)
extras.execute_batch(cursor, query, tuples, page_size= 100)
...

이 인쇄물 :

vals_frame: '%%s,%%s,%%s,%%s,%%s'

그것은 내가 원하는 것입니다. 그러나 쿼리 작성 중에는 아래 오류가 발생합니다.

TypeError: not all arguments converted during string formatting

이걸 지나쳐야하는 방법? 나는 시도했다 :

vals_frame= len(colomn_list) * """\%\%s,"""
vals_frame= len(colomn_list) * """\\%%s,"""

그러나 이것은 작동하지 않는 것 같습니다. 어떤 도움을받을 수 있습니까?

  • 이전 c++ : 루프 클리핑 기능에 중첩 된 작성
  • 다음 sharepoint : 전원 자동화 흐름 생성 프록시 오류