我有以下代码:
query = """
SELECT Coalesce((SELECT sp.param_value
FROM sites_params sp
WHERE sp.param_name = 'ci'
AND sp.site_id = s.id
ORDER BY sp.id DESC
LIMIT 1), -1) AS ci
FROM sites s
WHERE s.deleted = 0
AND s.id = 10
"""
site = db_session.execute(query)
# print site
# <sqlalchemy.engine.result.ResultProxy object at 0x033E63D0>
site = db_session.execute(query).fetchone()
print site # (u'375')
print list(site) # [u'375']
为什么SQLAlchemy为这个查询返回元组,而不是dict?我要使用以下样式访问查询结果:
print site.ci
# u'375'
我已经构建了一个简单的类,在我们的进程中像数据库接口一样工作。这里是:
这是一个古老的问题,但今天仍然相关。让SQL炼金术返回字典非常有用,特别是在使用返回JSON的基于RESTful的api时。
下面是我在Python 3中使用
db_session
的方法:最终结果是数组
a
现在包含字典格式的查询结果。至于这在SQL炼金术中是如何工作的:
db_session.execute(query)
返回一个ResultProxy
对象ResultProxy
对象由RowProxy
对象组成RowProxy
对象有一个.items()
方法,该方法返回行中所有项的键、值元组,可以在for
操作中将其解压缩为key, value
。这里有一个单列备选方案:
从文档中:
链接:http://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.RowProxy.items
你看过那些文件了吗? 它准确地描述了@Gryphius和@Syed Habib M的建议,即使用
site['ci']
。ResultProxy
并不像您所说的那样“返回元组”-它是(毫不奇怪)一个代理,其行为(例如打印)类似元组,但也支持类似字典的访问:从文档中:
相关问题 更多 >
编程相关推荐