【问题标题】:Using enum inside Pony ORM query在 Pony ORM 查询中使用枚举
【发布时间】:2021-05-05 22:43:25
【问题描述】:

我有一个实体和一个枚举,声明如下:

class SupplierModel(db.Entity):
    id = PrimaryKey(int, unsigned=True, auto=True)
    ...

class Supplier(IntEnum):
    MyFirstSupplier = 1
    MySecondSupplier = 2
    ...

我的目标不是存储每个供应商(由用户动态创建和删除),但对于其中少数供应商,我的业务逻辑中有一些“自定义”功能,因此我需要识别它们。 那些特定的供应商实体基本上是不可变的,所以我将它们的主键存储在这个枚举中。

到目前为止一切顺利,直到我尝试做这样的事情:

select(sup for sup in SupplierModel if sup.id == Supplier.MyFirstSupplier)

我收到此错误:表达式 Supplier.MyFirstSupplier 具有不受支持的类型“供应商”

是不是我做错了什么?

感谢您的帮助。

【问题讨论】:

标签: python python-3.x enums ponyorm


【解决方案1】:

问题不在于 PonyORM,而在于您如何访问 IntEnum 值。查看the Python Enum docs 的示例。

Supplier.MyFirstSupplier 仅返回枚举 <Supplier.MyFirstSupplier: 1>,而不是您期望的值 1。您需要像这样附加.value

select(sup for sup in SupplierModel if sup.id == Supplier.MyFirstSupplier.value)

我发现在控制台中的交互式 Python 提示符中快速测试这些很有帮助,它会立即变得很清楚,然后出了什么问题:

>>> Supplier.MyFirstSupplier
<Supplier.MyFirstSupplier: 1>
>>> type(Supplier.MyFirstSupplier)
<enum 'Supplier'>
>>> Supplier.MyFirstSupplier.value
1

【讨论】:

    猜你喜欢
    • 2015-10-02
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多