Python 在枚举列上应用数组_agg返回&引用;{“不在定义的枚举值中”;

Python 在枚举列上应用数组_agg返回&引用;{“不在定义的枚举值中”;,python,sql,postgresql,enums,sqlalchemy,Python,Sql,Postgresql,Enums,Sqlalchemy,在我的项目中,我使用Postgres DB和SQLAlchemy作为ORM。我定义了几个枚举,我们在不同的模型中使用它们 我定义了一个枚举 class TestEnum(MultiValuedEnum): STATE1 = 'state-1', ( 'State 1', 'Waiting state 2') STATE2 = 'state-2', ( 'State 2', 'In state 2') STATE3 = 'state-3', (

在我的项目中,我使用Postgres DB和SQLAlchemy作为ORM。我定义了几个枚举,我们在不同的模型中使用它们

我定义了一个枚举

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]
此枚举在类中使用

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)
现在如果我写一个查询

query = session.query(
        ExampleClass.product_code,
        func.array_agg(ExampleClass.state)
    ).group_by(ExampleClass.product_code).all()
我得到以下错误

“{”不在定义的枚举值中

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

+---+------------+----------------+
|   |product_code|      State     |
+---+------------+----------------+
| 1 | A          |{STATE1,STATE2} |
| 2 | B          |{STATE2,STATE3} |
| 3 | C          |{STATE1,STATE3} |
+---+------------+----------------+
SQL Alchemy似乎正在尝试将状态列表解析为
状态
对象,但由于开始时
{
将其表示为一个列表而失败。如果它不将其转换为一个状态列表,为什么会出现此错误,以及如何修复或解决此问题

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

所以,在尝试不同的事情时,我尝试了
json\u agg
,它似乎起了作用

query = session.query(
        ExampleClass.product_code,
        func.json_agg(ExampleClass.state)
    ).group_by(ExampleClass.product_code).all()
它似乎以列表的形式返回枚举