如何在peewee中的SelectQuery中实现Expression的数组切片?

时间:2018-01-31 11:51:43

标签: python peewee

是否可以在peewee中的SelectQuery中实现Expression的数组切片?

我想在PostgreSQL查询中使用regexp进行模式匹配,我可以使用fn.REGEXP_MATCH(col_name, regexp)进行匹配,但它将数组作为字符串返回,如此"['foo']"。所以我需要在数据库端只获取带有切片的数组的第一个元素,如下所示:(regexp_match(col_name, regexp)[1]

我需要用orm实现这个查询:

SELECT (regexp_match(h.name, '^ATM-\w{5}-(\S+)$'))[1] FROM zbxhost h;

这次尝试将数组作为字符串返回:

ZbxHost.select(ZbxHost.name, fn.REGEXP_MATCH(ZbxHost.name, '^ATM-\w{5}-(\S+)$'))

我唯一想到的就是不使用正则表达式。在这种情况下,它是可能的,但如果将来有必要怎么办?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用" unfst"功能(通过fn.unnest)。

如果您正在寻找实现数组类型的东西,请查看playhouse / postgres_ext.py中ArrayField的实现:

https://github.com/coleifer/peewee/blob/b48aab31fe5cd788099b821b2c2cf5d05d196d3f/playhouse/postgres_ext.py#L114-L184