मैं नीचे दिए गए कोड का उपयोग करके MSSQL तालिका में एक अजगर डेटाफ़्रेम सम्मिलित करना चाह रहा हूँ:
conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};\
Server=esql.ecs.local;\
Database=drgt;\
Trusted_Connection=yes;')
cursor = conn.cursor() #Create cursor
for row_count in range(0, t6.shape[0]):
chunk = t6.iloc[row_count:row_count+1,:].values.tolist()
tuple_of_tuples = tuple(tuple(x) for x in chunk)
cursor.executemany("insert into DWWorking.dbo.api_Nic_Data"+"([[a],[b],[c],[d],[e],[f],\
[g],[h],[i],[j],[k],[l],[m],[n],\
[o],[p],[q],[r],[s],[t],[u],[v],\
[w],[x],[y],[z],[ab],[cd],\
[ef],[gh],[ij],[kl]])\
values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
tuple_of_tuples)
कर्सर खोला गया है और मैंने जाँच की है कि तालिका मौजूद है और इसमें आवश्यक कॉलम हैं। निष्पादित करते समय मुझे अभी भी निम्न त्रुटि प्राप्त होती है:
प्रोग्रामिंग त्रुटि: ('एसक्यूएल में 0 पैरामीटर मार्कर हैं, लेकिन 33 पैरामीटर दिए गए थे', 'एचवाई000')
मैं कैसे हल कर सकता हूँ?
2 जवाब
मूल क्वेरी को उचित SQL के साथ काम करना चाहिए जिसमें INSERT INTO
कॉलम सूची को संलग्न करने वाले ब्रैकेट नहीं हैं। इसके अतिरिक्त, executemany
को डेटा फ्रेम पंक्तियों में किसी भी for
लूप की आवश्यकता नहीं होनी चाहिए और यह df.to_sql
से तेज हो सकता है। साथ ही, टेबल और कॉलम आइडेंटिफ़ायर को सिंगल कोट्स का उपयोग नहीं करना चाहिए।
वैसे, आसान मल्टी-लाइन स्ट्रिंग्स के लिए, पायथन के ट्रिपल कोट स्ट्रिंग पर विचार करें। ध्यान दें, चूंकि पंडों v0.24, .to_numpy
को .values
से अधिक अनुशंसित विधि है (देखें docs)। नीचे मान लिया गया है कि डेटा फ्रेम में ठीक 32 कॉलम होते हैं जो प्रत्येक मैप को संबंधित टेबल कॉलम से जोड़ते हैं।
sql = """INSERT INTO DWWorking.dbo.api_Nic_Data
([a],[b],[c],[d],[e],[f],[g],[h],[i],[j],
[k],[l],[m],[n],[o],[p],[q],[r],[s],[t],
[u],[v] [w],[x],[y],[z],[ab],[cd],[ef],[gh],[ij],[kl])
VALUES (?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?)
"""
cursor.executemany(sql, t6.to_numpy().tolist())
भावी पाठकों के लिए उचित उत्तर प्रदान करने के लिए...
टिप्पणियों के बाद, यह निम्नलिखित का उपयोग करने के लिए अधिक सीधा और संभावित रूप से अधिक कुशल होगा:
- पांडा
DataFrame.to_sql()
समारोह sqlalchemy
engine
ऑब्जेक्ट
दोनों के लिए डॉक्स यहां देखे जा सकते हैं:
चूंकि इसके लिए उपयोग के मामले हर मामले में बहुत भिन्न हो सकते हैं, कृपया कोड उदाहरणों के लिए आधिकारिक डॉक्स देखें।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।