msgprop.EnumProperty 和 messages.Enum 使用 Python 3 和 Cloud NDB 的最佳实践是什么?
What are Best Practice for msgprop.EnumProperty and messages.Enum with Python 3 and Cloud NDB?
使用 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,基于 this guide,它表示 google.appengine.ext.ndb.msgprop.EnumProperty 的 If you try to create these objects, a NotImplementedError will be raised.
。
明白
from google.appengine.ext import ndb
被
取代
from google.cloud import ndb
但是 从现在开始,Enum 的最佳实践是什么,因为它没有实现?
谢谢
抱歉,我没有测试项目来验证这一点,但是 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)
使用 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,基于 this guide,它表示 google.appengine.ext.ndb.msgprop.EnumProperty 的 If you try to create these objects, a NotImplementedError will be raised.
。
明白
from google.appengine.ext import ndb
被
取代from google.cloud import ndb
但是 从现在开始,Enum 的最佳实践是什么,因为它没有实现?
谢谢
抱歉,我没有测试项目来验证这一点,但是 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)