2011-03-04 9 views
6

का उपयोग कर क्वेरी परिणाम से कॉलम नाम प्राप्त करें क्या pymssql परिणामों से कॉलम नाम प्राप्त करने का कोई तरीका है? अगर मैं as_dict = true निर्दिष्ट करता हूं तो मुझे एक शब्दकोश वापस मिलता है, जिसमें सभी कॉलम हेडर होते हैं, लेकिन चूंकि यह एक शब्दकोश है, उन्हें आदेश नहीं दिया जाता है।pymssql

उत्तर

14

pymssql पाइथन DB-API का समर्थन करने का दावा करता है, इसलिए आपको अपने कर्सर ऑब्जेक्ट से .description विशेषता प्राप्त करने में सक्षम होना चाहिए।

.description

 This read-only attribute is a sequence of 7-item 
     sequences. 

     Each of these sequences contains information describing 
     one result column: 

     (name, 
      type_code, 
      display_size, 
      internal_size, 
      precision, 
      scale, 
      null_ok) 

तो, "आंतरिक" दृश्यों में से प्रत्येक में पहले आइटम प्रत्येक स्तंभ के लिए नाम है।

0

यह एक बुनियादी समाधान है और इसे अनुकूलित करने की आवश्यकता है लेकिन नीचे दिया गया उदाहरण सूची में कॉलम हेडर और कॉलम मान दोनों देता है।

import pymssql 

def return_mssql_dict(sql): 
    try: 

     con = pymssql.connect(server, user, password, database_name) 
     cur = con.cursor() 
     cur.execute(sql) 

     def return_dict_pair(row_item): 
      return_dict = {} 
      for column_name, row in zip(cur.description, row_item): 
       return_dict[column_name[0]] = row 
      return return_dict 

     return_list = [] 
     for row in cur: 
      row_item = return_dict_pair(row) 
      return_list.append(row_item) 

     con.close() 

     return return_list 

    except Exception, e: 
     print '%s' % (e) 

2

एक भी अल्पविराम से अलग लाइन पर स्तंभ नाम पाने के लिए।

colNames = "" 
for i in range(len(cursor.description)): 
    desc = cursor.description[i] 
     if i == 0: 
      colNames = str(desc[0]) 
     else: 
      colNames += ',' + str(desc[0]) 
     print colNames 

वैकल्पिक रूप से, कॉलम नामों को एक सूची में पास करें और उन्हें स्ट्रिंग के रूप में प्राप्त करने के लिए .join का उपयोग करें।

colNameList = [] 
    for i in range(len(cursor.description)): 
     desc = cursor.description[i] 
     colNameList.append(desc[0]) 

     colNames = ','.join(colNameList) 
     print colNames 
+0

वास्तव में अजगर जिस तरह से यह है क्या करने के लिए "," में शामिल होने के (cursor.description) –

+0

। डिस्क्रिप्शन 7-आइटम टुपल्स की एक सूची है, इसलिए "," शामिल हों (कर्सर डिस्क्रिप्शन) ऐसा नहीं करेगा। – Robert

1

आप आदेश दिया स्तंभ कर्सर वर्णन विशेषता पर सूची समझ का उपयोग कर नामों की एक सूची बना सकते हैं:।

column_names = [item[0] for item in cursor.description]