यहां समस्या यह है कि प्रत्येक पंक्ति के लिए एक सम्मिलित क्वेरी बनाई जाती है, फिर अगली पंक्ति डालने से पहले यह एसीके की प्रतीक्षा करता है।
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
यह nhockham का पैच है to_sql डालने पर जो लाइन से लाइन सम्मिलित करता है। ये रहा github मुद्दा।
यदि आप pandas.to_sql का उपयोग करना छोड़ सकते हैं, तो मेरा सुझाव है कि आप sql-alchemy बल्क इंसर्ट का प्रयास करें या अपने आप से एक मल्टीरो क्वेरी बनाने के लिए केवल स्क्रिप्ट लिखें।
संपादित करें:स्पष्ट करने के लिए हम pandas.io.sql में क्लास SQLTable की _execute_insert विधि को संशोधित कर रहे हैं, इसलिए इसे आयात पांडा मॉड्यूल से पहले स्क्रिप्ट में जोड़ा जाना चाहिए।
अंतिम पंक्ति परिवर्तन है।
conn.execute(self.insert_statement(), data)
में बदल दिया गया है:
conn.execute(self.insert_statement().values(data))
पहली पंक्ति पंक्ति दर पंक्ति सम्मिलित करेगी जबकि अंतिम पंक्ति सभी पंक्तियों को एक sql कथन में सम्मिलित करेगी।
अपडेट:पांडा के नए संस्करणों के लिए, हमें उपरोक्त क्वेरी में थोड़ा संशोधन करने की आवश्यकता होगी।
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