我将Python与SQLAlchemy一起使用(在我的特定情况下是GeoAlchemy),并且我有一个查询,结果是一列行对象。我希望从这些row对象中提取特定的值,但是SQLAlchemy将row对象解释为单个实体(如果我是正确的,将它们作为字符串返回)。在不使用Python解析它们的情况下,如何更清晰地获取这些单独的值?在
我的真实生活用例:
PostgreSQL的PostGIS扩展提供了一个名为^{valid_detail
行,该行由布尔valid
、字符串reason
和发生无效的几何体location
。因为我觉得这个问题比那个问题更普遍,所以我不提PostGIS标签了。我的查询类似于SELECT ST_IsValidDetail('POINT(1 1)'::GEOMETRY);
(当然,还有更复杂的几何体)。在
您可以使用:
。。。但是不幸的是,PostgreSQL实际上对每一行执行一次
^{pr2}$ST_IsValidDetail
函数。作为一种解决方法,您可以将查询稍微弄乱一点,通过一个公共表表达式具体化,然后在第二个过程中提取元组:需要
(v)
周围的paren来告诉解析器您引用的是一个值,而不是表名。在演示:
我从
ST_IsValidDetail
页面上的例子中找到了一种方法。显然,以下语法是有效的:注意
^{pr2}$reason
和location
“调用”围绕着函数调用;由ST_IsValidDetail
返回的行中列的名称几乎被视为函数。结果证明你可以欺骗SQLAlchemy做同样的事情。(假设session
是先前设置的Session
对象,db_geom
是一个地学几何对象。)result[0]
将包含原因,result[1]
将包含该位置的WKT。(我们可以使用label
来给出列的实际名称。)要在不使用PostGIS功能的情况下对其进行修剪:
这使得SQLAlchemy认为
columnname
是一个函数,并以以下形式向数据库发送SQL我还没有尝试过它,但是如果有一种方法可以让SQLAlchemy将我们的行看作是我们选择的表
FROM
,那也可以。(请参阅ST_IsValidDetail
页的最底部。)相关问题 更多 >
编程相关推荐