加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用SQLAlchemy解压缩PostGIS / PostgreSQL记录

发布时间:2020-12-13 16:07:18 所属栏目:百科 来源:网络整理
导读:如何使用SQLAlchemy的ORM编写以下查询? SELECT filename,(stats).*FROM ( SELECT filename,ST_SummaryStats(rast,1,TRUE) AS stats FROM tiles) AS stats_table; 这里, ST_SummaryStats 是一个PostGIS函数,它返回我想要解压缩的记录. tiles是一个带有文件名
如何使用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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读