2011-12-07 25 views
5

वहाँ MySQL करने के लिए adbapi क्वेरी से परिणाम शब्दकोश लौटने के लिए कोई तरीका है?मुड़ MySQL adbapi वापसी शब्दकोश

[name: 'Bob', phone_number: '9123 4567'] 

डिफ़ॉल्ट रिटर्न टुपल।

['Bob', '9123 4567'] 

सरल अजगर & MySQL के लिए हम MySQLdb.cursors.DictCursor उपयोग कर सकते हैं। लेकिन यह कैसे मुड़ adbapi


युपीडी के साथ उपयोग करने के लिए: मैं इसे हल लेकिन मुझे लगता है बेहतर तरीका होना चाहिए। मेरे समाधान: बस ओवरराइड * _runInteraction * adbapi.ConnectionPool वर्ग की विधि।

class MyAdbapiConnectionPool(adbapi.ConnectionPool): 
def _runInteraction(self, interaction, *args, **kw): 
    conn = self.connectionFactory(self) 
    trans = self.transactionFactory(self, conn) 
    try: 
     result = interaction(trans, *args, **kw) 
     if(result and isinstance(result[0], (list, tuple))): 
      colnames = [c[0] for c in trans._cursor.description] 
      result = [dict(zip(colnames, item)) for item in result]   
     trans.close() 
     conn.commit() 
     return result 
    except: 
     excType, excValue, excTraceback = sys.exc_info() 
     try: 
      conn.rollback() 
     except: 
      log.err(None, 'Rollback failed') 
     raise excType, excValue, excTraceback 

उत्तर

9

आप प्रत्यक्ष MySQLdb connect कार्य करने के लिए cursorclass तर्क के लिए मूल्य के रूप में यह पारित करके DictCursor उपयोग करने के लिए कर सकते हैं। ConnectionPool आप कनेक्ट विधि के माध्यम से मनमाने ढंग से तर्क पारित करने के लिए अनुमति देता है: उदाहरण के लिए runQuery("SELECT 1") आजकल ({'1': 1L},)

+2

का एक परिणाम पैदा करता है

import MySQLdb pool = ConnectionPool("MySQLdb", ..., cursorclass=MySQLdb.cursors.DictCursor) ... 

जब आप कोई क्वेरी चलाने के लिए, यदि आप एक dict वापस बजाय एक टपल के मिल जाएगा, हम निष्पादन के लिए इस कोड को आयात MySQLdb.cursors करने की ज़रूरत है। –

संबंधित मुद्दे