Psycopg 2.7의 새로운 execute_values
방법 :
data = [(1,'x'), (2,'y')]
insert_query = 'insert into t (a, b) values %s'
psycopg2.extras.execute_values (
cursor, insert_query, data, template=None, page_size=100
)
Psycopg 2.6에서 그것을하는 pythonic 방법 :
data = [(1,'x'), (2,'y')]
records_list_template = ','.join(['%s'] * len(data))
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
cursor.execute(insert_query, data)
설명 : 삽입 할 데이터가 다음과 같이 튜플 목록으로 제공되는 경우
data = [(1,'x'), (2,'y')]
이미 정확한 형식으로되어 있습니다.
values
의 구문 insert
절에서와 같은 기록의 목록을 기대
insert into t (a, b) values (1, 'x'),(2, 'y')
Psycopg
Python tuple
을 Postgresql에 적용합니다 record
.
유일하게 필요한 작업은 psycopg가 채울 레코드 목록 템플릿을 제공하는 것입니다
# We use the data list to be sure of the template length
records_list_template = ','.join(['%s'] * len(data))
insert
쿼리에 배치
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
insert_query
출력물 인쇄
insert into t (a, b) values %s,%s
이제 일반적인 Psycopg
인수 대체로
cursor.execute(insert_query, data)
또는 서버로 전송 될 내용을 테스트하기 만하면됩니다.
print (cursor.mogrify(insert_query, data).decode('utf8'))
산출:
insert into t (a, b) values (1, 'x'),(2, 'y')
execute
전략 을 사용하는 것이 좋습니다 . 이 덕분에 약 100 배의 속도가 향상되었습니다!