Vấn đề ở đây là đối với mỗi hàng một truy vấn chèn được thực hiện, sau đó trước khi chèn hàng tiếp theo, nó sẽ đợi ACK.
Thử chạy đoạn mã này trước khi import pandas as pd
from pandas.io.sql import SQLTable
def _execute_insert(self, conn, keys, data_iter):
print("Using monkey-patched _execute_insert")
data = [dict((k, v) for k, v in zip(keys, row)) for row in data_iter]
conn.execute(self.insert_statement().values(data))
SQLTable._execute_insert = _execute_insert
Đây là bản vá của nhockham trên to_sql insert sẽ chèn từng dòng. Đây là sự cố github.
Nếu bạn có thể từ bỏ việc sử dụng pandas.to_sql, tôi khuyên bạn nên thử chèn hàng loạt sql-alchemy hoặc chỉ cần viết tập lệnh để tự tạo một truy vấn nhiều con.
Chỉnh sửa:Để làm rõ, chúng tôi đang sửa đổi phương thức _execute_insert của Lớp SQLTable trong pandas.io.sql Vì vậy, điều này phải được thêm vào tập lệnh trước khi nhập mô-đun gấu trúc.
Dòng cuối cùng là sự thay đổi.
conn.execute(self.insert_statement(), data)
đã được đổi thành:
conn.execute(self.insert_statement().values(data))
Dòng đầu tiên sẽ chèn từng hàng trong khi dòng cuối cùng sẽ chèn tất cả các hàng trong một câu lệnh sql.
Cập nhật:Đối với các phiên bản gấu trúc mới hơn, chúng tôi sẽ cần sửa đổi một chút đối với truy vấn trên.
from pandas.io.sql import SQLTable
def _execute_insert(self, conn, keys, data_iter):
print("Using monkey-patched _execute_insert")
data = [dict(zip(keys, row)) for row in data_iter]
conn.execute(self.table.insert().values(data))
SQLTable._execute_insert = _execute_insert