Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पांडा से प्रविष्टि को कैसे तेज करें। DataFrame .to_sql

यहां समस्या यह है कि प्रत्येक पंक्ति के लिए एक सम्मिलित क्वेरी बनाई जाती है, फिर अगली पंक्ति डालने से पहले यह एसीके की प्रतीक्षा करता है।

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP वेबसाइट के भीतर डेटाबेस क्रेडेंशियल्स को सुरक्षित रूप से कहाँ स्टोर करें

  2. MySQL - तिथि और श्रेणी के आधार पर सूची खींचना

  3. mysql_fetch_array () रिटर्न 'आपूर्ति की गई तर्क एक मान्य MySQL परिणाम संसाधन नहीं है'

  4. php . के साथ अल्पविराम से अलग mySql डेटाबेस फ़ील्ड मान को अलग करें

  5. एसक्यूएल में घटना को संख्या कैसे दें?