在 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
我有一个实体和一个枚举声明如下:
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