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

pyodbc का उपयोग करके MS SQL सर्वर में बल्क इंसर्ट को कैसे गति दें

जैसा कि किसी अन्य उत्तर में एक टिप्पणी में उल्लेख किया गया है, टी-एसक्यूएल 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 सेकंड से कम कर दिया।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. शीर्ष 5 सुविधाएँ आपके SQL सर्वर डेटाबेस प्रदर्शन निगरानी प्लेटफ़ॉर्म को प्रदान करने की आवश्यकता है

  2. सी # में बिगिंट के बराबर क्या है?

  3. SQL सर्वर में एक जाँच बाधा कैसे बनाएँ (T-SQL उदाहरण)

  4. एसक्यूएल सर्वर में पंक्ति संख्या पर आंतरिक शामिल कैसे करें?

  5. SQL सर्वर डेटा की स्क्रिप्ट कैसे प्राप्त करें?