首页 > 解决方案 > 使用 Python 3 和 Cloud NDB 的 msgprop.EnumProperty 和 messages.Enum 的最佳实践是什么?

问题描述

使用 Python 2 和 NDB,我们可以通过这种方式将 Enum 存储在实体的属性中:

from google.appengine.ext import ndb
from google.appengine.ext.ndb import msgprop
from protorpc import messages

class CoreWebhookService(messages.Enum):
    UNKNOWN = 0
    AUTH0 = 1

class CoreWebhook(ndb.model):
    service = msgprop.EnumProperty(CoreWebhookService, required=True)
    url = ndb.StringProperty(required=True)

使用 Python 3,根据本指南,它说If you try to create these objects, a NotImplementedError will be raised.google.appengine.ext.ndb.msgprop.EnumProperty。

我明白

from google.appengine.ext import ndb

正在被取代

from google.cloud import ndb

但是从现在开始 Enum 的最佳实践是什么,因为它没有实现?

谢谢

标签: pythongoogle-app-enginegoogle-cloud-datastoreapp-engine-ndbgoogle-app-engine-python

解决方案


抱歉,我没有测试项目来验证这一点,但 python 3 有枚举。你应该能够直接做一些事情,比如:

from enum import IntEnum

class CoreWebhookService(IntEnum):
    UNKNOWN = 0
    AUTH0 = 1

class CoreWebhook(ndb.model):
  service = IntegerProperty(required = true, choices=list(CoreWebhookService))
  url = ndb.StringProperty(required=True)


推荐阅读