gpt4 book ai didi

python - 在 Enum 列上应用 array_agg 返回 ""{"is not among the defined enum values"

转载 作者:行者123 更新时间:2023-11-29 12:15:10 26 4
gpt4 key购买 nike

对于我的项目,我使用 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()

我得到以下错误

"{" is not among the defined enum values

如果我在 dbeaver 中运行生成的查询(使用 sqltap 捕获),我会得到正确的结果,它看起来像这样

+---+------------+----------------+
| |product_code| State |
+---+------------+----------------+
| 1 | A |{STATE1,STATE2} |
| 2 | B |{STATE2,STATE3} |
| 3 | C |{STATE1,STATE3} |
+---+------------+----------------+

看起来,SQL Alchemy 正在尝试将状态列表解析为 State 对象,但由于 { 在开始时将其表示为列表而失败 I认为。如果它不将其转换为状态列表,为什么我会收到此错误以及修复或解决方法是什么。

array_agg 似乎在项目的其他字段上工作正常,并且我能够遍历返回的数组,但对于 ENUM,它似乎失败了。谢谢

最佳答案

所以,在尝试不同的东西时,我尝试了 json_agg 并且它似乎有效。所以现在我的查询看起来像

query = session.query(
ExampleClass.product_code,
func.json_agg(ExampleClass.state)
).group_by(ExampleClass.product_code).all()

它似乎以列表的形式返回给我 ENUMS。

关于python - 在 Enum 列上应用 array_agg 返回 ""{"is not among the defined enum values",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com