如何在 peewee 的 SelectQuery 中实现 Expression 的数组切片?
How to implement array slicing for Expression within SelectQuery in peewee?
是否可以在peewee中的SelectQuery中实现Expression的数组切片?
我想在 PostgreSQL 查询中使用正则表达式进行模式匹配,我可以用 fn.REGEXP_MATCH(col_name, regexp)
来完成,但它 returns 数组作为字符串,就像这样 "['foo']"
。所以我只需要在数据库端获取带有切片的数组的第一个元素,如下所示:(regexp_match(col_name, regexp)[1]
.
我需要用 orm 实现这个查询:
SELECT (regexp_match(h.name, '^ATM-\w{5}-(\S+)$'))[1] FROM zbxhost h;
然后尝试 returns 我的数组作为字符串:
ZbxHost.select(ZbxHost.name, fn.REGEXP_MATCH(ZbxHost.name, '^ATM-\w{5}-(\S+)$'))
我唯一想到的就是不要使用正则表达式。在这种情况下是可能的,但如果将来有必要怎么办?
您可以尝试使用 "unnest" 函数(通过 fn.unnest)。
如果您正在寻找实现数组类型的东西,请查看 playhouse/postgres_ext.py:
中 ArrayField 的实现
是否可以在peewee中的SelectQuery中实现Expression的数组切片?
我想在 PostgreSQL 查询中使用正则表达式进行模式匹配,我可以用 fn.REGEXP_MATCH(col_name, regexp)
来完成,但它 returns 数组作为字符串,就像这样 "['foo']"
。所以我只需要在数据库端获取带有切片的数组的第一个元素,如下所示:(regexp_match(col_name, regexp)[1]
.
我需要用 orm 实现这个查询:
SELECT (regexp_match(h.name, '^ATM-\w{5}-(\S+)$'))[1] FROM zbxhost h;
然后尝试 returns 我的数组作为字符串:
ZbxHost.select(ZbxHost.name, fn.REGEXP_MATCH(ZbxHost.name, '^ATM-\w{5}-(\S+)$'))
我唯一想到的就是不要使用正则表达式。在这种情况下是可能的,但如果将来有必要怎么办?
您可以尝试使用 "unnest" 函数(通过 fn.unnest)。
如果您正在寻找实现数组类型的东西,请查看 playhouse/postgres_ext.py:
中 ArrayField 的实现