首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Enum列上应用array_agg返回“{”不在定义的枚举值中

在Enum列上应用array_agg返回“{”不在定义的枚举值中
EN

Stack Overflow用户
提问于 2019-10-18 07:08:18
回答 1查看 314关注 0票数 2

对于我的项目,我使用Postgres和SQLAlchemy作为ORM。我已经定义了几个枚举,我们正在使用不同的模式。

我定义了一个枚举

代码语言:javascript
复制
class TestEnum(MultiValuedEnum):
   STATE1 = 'state-1', (
        'State 1', 'Waiting state 2')

   STATE2 = 'state-2', (
        'State 2', 'In state 2')

   STATE3 = 'state-3', (
        'State 3', 'In state 3')

    @property
    def display_name(self):
        return self.metadata[0]

    @property
    def description(self):
        return self.metadata[1]

这个枚举在类中使用。

代码语言:javascript
复制
class ExampleClass(db.Model):
    id = db.Column(db.BigInteger, primary_key=True, nullable=False)
    product_id = db.Column(db.BigInteger, nullable=False)
    state = db.Column(db.Enum(constants.TestEnum), nullable=False)

现在如果我写一个查询

代码语言:javascript
复制
query = session.query(
        ExampleClass.product_code,
        func.array_agg(ExampleClass.state)
    ).group_by(ExampleClass.product_code).all()

我得到以下错误

"{“不在定义的枚举值中。

如果我在dbeaver中运行生成的查询(使用sqltap捕获),则得到正确的结果,它如下所示

代码语言:javascript
复制
+---+------------+----------------+
|   |product_code|      State     |
+---+------------+----------------+
| 1 | A          |{STATE1,STATE2} |
| 2 | B          |{STATE2,STATE3} |
| 3 | C          |{STATE1,STATE3} |
+---+------------+----------------+

看起来,seems试图将状态列表解析为State对象,并且由于{在开始时将其表示为一个列表而失败了。如果它不把它转换成一个状态列表,为什么我会得到这个错误,以及修复或处理什么。

array_agg似乎在项目中的其他字段上工作得很好,而且我能够遍历返回的数组,但是对于ENUM,它似乎失败了。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 07:39:31

所以,当我尝试不同的东西时,我尝试了json_agg,它看起来很有效。所以现在我的查询看起来

代码语言:javascript
复制
query = session.query(
        ExampleClass.product_code,
        func.json_agg(ExampleClass.state)
    ).group_by(ExampleClass.product_code).all()

它似乎以列表的形式把ENUMS还给了我。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58445632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档