在 Pony ORM 查询中使用枚举

Using enum inside Pony ORM query

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

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 具有不受支持的类型 'Supplier'

我做错了什么吗?

感谢您的帮助。

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

Supplier.MyFirstSupplier returns 只有枚举 <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