gpt4 book ai didi

python - Twisted MySQL adbapi 返回字典

转载 作者:太空狗 更新时间:2023-10-29 21:38:05 27 4
gpt4 key购买 nike

有什么方法可以将adbapi查询的字典结果返回给MySQL吗?

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

默认返回元组。

['Bob', '9123 4567']

对于简单的 Python 和 MySQL,我们可以使用 MySQLdb.cursors.DictCursor。但是如何将它与扭曲的 adbapi 一起使用


UPD: 我解决了它,但我认为应该有更好的方法。我的解决方案:只需覆盖 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

最佳答案

您可以通过将 DictCursor 作为 cursorclass 参数的值传递给 connect 函数来指示 MySQLdb 使用 DictCursorConnectionPool 允许您将任意参数传递给连接方法:

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

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

关于python - Twisted MySQL adbapi 返回字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8411613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com