यह बिलकुल सच नहीं है। आप COPY FROM
. का उपयोग करने के लिए इसे लागू कर सकते हैं kwarg method
. के लिए अपना स्वयं का कार्य प्रदान करके वह to_sql
स्वीकार करता है। DataFrame के लिए पंडों के दस्तावेज़ में मुख्य बिट .to_sql
वह जगह है जहां method
न केवल एक स्ट्रिंग हो सकती है, बल्कि एक कॉल करने योग्य भी हो सकती है। आप यही प्रदान करेंगे
उदाहरण के लिए:
from csv import (writer as csv_writer, QUOTE_MINIMAL)
from io import StringIO
def some_function(df, connection):
try:
frame.to_sql(
'my_table',
connection,
schema='public',
if_exists='append',
index=False,
method=copy_from_method)
except Exception as err:
print('Got an error ({})'.format(str(err))
फिर, आप copy_from_method
implement लागू कर सकते हैं कुछ इस तरह:
def copy_from_method(table, conn, keys, data_iter, pre_truncate=False, fatal_failure=False):
"Custom method for pandas.DataFrame.to_sql that will use COPY FROM"""
dbapi_conn = conn.connection
cur = dbapi_conn.cursor()
s_buf = StringIO()
writer = csv_writer(s_buf, quoting=QUOTE_MINIMAL)
writer.writerows(data_iter)
s_buf.seek(0)
columns = ', '.join('"{}"'.format(k) for k in keys)
table_name = '{}.{}'.format(
table.schema, table.name) if table.schema else table.name
sql_query = 'COPY %s (%s) FROM STDIN WITH CSV' % (table_name, columns)
cur.copy_expert(sql=sql_query, file=s_buf)
return cur.rowcount
उदाहरण copy_from_method
स्पष्ट रूप से कुछ काम का उपयोग कर सकता है- और आपको कुछ मामलों में सीएसवी लेखक के साथ उद्धृत करने और बचने से सावधान रहना होगा। लेकिन यह मोटा संस्करण किसी भी टाइपो/कॉपी पेस्ट त्रुटियों को छोड़कर अपेक्षाकृत अच्छी तरह से काम करना चाहिए (यह एक परियोजना में उपयोग किया जाने वाला एक छीन लिया गया संस्करण है)