如何使用sqlAlchemy的ORM编写以下查询?
SELECT filename,(stats).* FROM ( SELECT filename,ST_SummaryStats(rast,1,TRUE) AS stats FROM tiles ) AS stats_table;
这里,ST_SummaryStats
是一个PostGIS函数,它返回我想要解压缩的记录. tiles是一个带有文件名和rast(栅格)列的PostGIS表.我的尝试如下:
sub_q = db_session.query( Tiles.filename,func.ST_SummaryStats(Tiles.rast,True).label('stats'),).subquery() q = db_session.query( sub_q.columns.filename,sub_q.columns.stats,)
但是,我不知道如何使用sqlAlchemy的ORM编写(stats).*表达式 – 因此解压缩记录.因此,统计数据似乎是一个元组.
在此先感谢您的帮助.
解决方法
ST_SummaryStats()返回一条记录,因此不要将它用作SELECT表达式(它将返回记录),而是将其用作FROM子句并在SELECT级别选择所需的统计信息,因此它变得非常简单:
SELECT filename,count,sum,mean,stddev,min,max FROM tiles,ST_SummaryStats(tiles.rast,true);
这会产生一个所谓的LAteraL JOIN,因为ST_SummaryStats()只为tile中指示的栅格返回一行,所以不需要连接条件,过滤器或其他任何东西.
我不确定sqlAlchemy是否能够将函数的结果用作类,但是使这项工作成为可靠的方法是将上面的SELECT包装到VIEW中,然后从sqlAlchemy访问该视图:
CREATE VIEW raster_stats AS SELECT filename,max FROM tiles,true);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。