使用 SQLAlchemy 解压缩 PostGIS/PostgreSQL 记录
Unpack a PostGIS/PostgreSQL record with SQLAlchemy
如何使用 SQLAlchemy 的 ORM 编写以下查询?
SELECT filename, (stats).*
FROM (
SELECT filename, ST_SummaryStats(rast, 1, TRUE) AS stats FROM tiles
) AS stats_table;
这里,ST_SummaryStats
是一个PostGIS函数,returns我要解包的记录。 tiles
是具有 filename
和 rast
(栅格)列的 PostGIS table。我的尝试如下:
sub_q = db_session.query(
Tiles.filename,
func.ST_SummaryStats(Tiles.rast, 1, True).label('stats'),
).subquery()
q = db_session.query(
sub_q.columns.filename,
sub_q.columns.stats,
)
但是,我不知道如何使用 SQLAlchemy 的 ORM 编写 (stats).*
表达式——从而解压记录。因此,stats
看起来是一个元组。
在此先感谢您的帮助。
ST_SummaryStats()
return 是一个 record
,因此不要将其用作 SELECT
表达式(这将 return 变成 record
) ,将其用作 FROM
子句并在 SELECT
级别选择所需的统计信息,因此它变得非常简单:
SELECT filename, count, sum, mean, stddev, min, max
FROM tiles, ST_SummaryStats(tiles.rast, 1, true);
这会导致所谓的 LATERAL JOIN
,因为 ST_SummaryStats()
return 对于 tiles
中指示的 raster
只有一行不需要连接条件、过滤器或其他任何东西。
我不确定 SQLAlchemy 是否能够将函数的结果用作 class,但实现此功能的可靠方法是将上述 SELECT
包装成 VIEW
然后从 SQLAlchemy 访问视图:
CREATE VIEW raster_stats AS
SELECT filename, count, sum, mean, stddev, min, max
FROM tiles, ST_SummaryStats(tiles.rast, 1, true);
如何使用 SQLAlchemy 的 ORM 编写以下查询?
SELECT filename, (stats).*
FROM (
SELECT filename, ST_SummaryStats(rast, 1, TRUE) AS stats FROM tiles
) AS stats_table;
这里,ST_SummaryStats
是一个PostGIS函数,returns我要解包的记录。 tiles
是具有 filename
和 rast
(栅格)列的 PostGIS table。我的尝试如下:
sub_q = db_session.query(
Tiles.filename,
func.ST_SummaryStats(Tiles.rast, 1, True).label('stats'),
).subquery()
q = db_session.query(
sub_q.columns.filename,
sub_q.columns.stats,
)
但是,我不知道如何使用 SQLAlchemy 的 ORM 编写 (stats).*
表达式——从而解压记录。因此,stats
看起来是一个元组。
在此先感谢您的帮助。
ST_SummaryStats()
return 是一个 record
,因此不要将其用作 SELECT
表达式(这将 return 变成 record
) ,将其用作 FROM
子句并在 SELECT
级别选择所需的统计信息,因此它变得非常简单:
SELECT filename, count, sum, mean, stddev, min, max
FROM tiles, ST_SummaryStats(tiles.rast, 1, true);
这会导致所谓的 LATERAL JOIN
,因为 ST_SummaryStats()
return 对于 tiles
中指示的 raster
只有一行不需要连接条件、过滤器或其他任何东西。
我不确定 SQLAlchemy 是否能够将函数的结果用作 class,但实现此功能的可靠方法是将上述 SELECT
包装成 VIEW
然后从 SQLAlchemy 访问视图:
CREATE VIEW raster_stats AS
SELECT filename, count, sum, mean, stddev, min, max
FROM tiles, ST_SummaryStats(tiles.rast, 1, true);