有没有办法把adbapi查询的字典结果返回到mysql?

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

默认值返回元组。
['Bob', '9123 4567']

对于简单的python&mysql,我们可以使用mysqldb.cursors.dictcursor。但如何与扭曲的adbapi一起使用
我解决了,但我认为应该有更好的方法。我的解决方案:只需重写adbapi.connectionpool类的*runInteraction*方法。
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

最佳答案

通过将mysqldb作为DictCursor参数的值传递给cursorclass函数,可以指示mysqldb使用connectConnectionPool允许您将任意参数传递给connect方法:

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

当您运行一个查询时,您将得到一个dict返回而不是一个元组,例如runQuery("SELECT 1")产生一个({'1': 1L},)的结果。

10-05 21:40