जैसा कि किसी अन्य उत्तर में एक टिप्पणी में उल्लेख किया गया है, टी-एसक्यूएल BULK INSERT
कमांड केवल तभी काम करेगा जब आयात की जाने वाली फ़ाइल उसी मशीन पर है जिस पर SQL सर्वर इंस्टेंस है या एक SMB/CIFS नेटवर्क स्थान पर है जिसे SQL सर्वर इंस्टेंस पढ़ सकता है। इस प्रकार यह उस मामले में लागू नहीं हो सकता है जहां स्रोत फ़ाइल दूरस्थ क्लाइंट पर है।
pyodbc 4.0.19 ने एक Cursor#fast_executemany फीचर जोड़ा जो उस स्थिति में मददगार हो सकता है। fast_executemany
डिफ़ॉल्ट रूप से "बंद" है, और निम्न परीक्षण कोड ...
cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("TRUNCATE TABLE fast_executemany_test")
sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
params = [(f'txt{i:06d}',) for i in range(1000)]
t0 = time.time()
crsr.executemany(sql, params)
print(f'{time.time() - t0:.1f} seconds')
... मेरी परीक्षण मशीन पर निष्पादित होने में लगभग 22 सेकंड लगे। बस crsr.fast_executemany = True
जोड़ना ...
cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("TRUNCATE TABLE fast_executemany_test")
crsr.fast_executemany = True # new in pyodbc 4.0.19
sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
params = [(f'txt{i:06d}',) for i in range(1000)]
t0 = time.time()
crsr.executemany(sql, params)
print(f'{time.time() - t0:.1f} seconds')
... निष्पादन समय को केवल 1 सेकंड से कम कर दिया।