Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按种类名称列出的appengine ndb初始模型_Python_Google App Engine_App Engine Ndb - Fatal编程技术网

Python 按种类名称列出的appengine ndb初始模型

Python 按种类名称列出的appengine ndb初始模型,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我需要存储数据,问题是我只知道模型的名称,它与种类名称相同 class Tasks(ndb.Model): title = ndb.StringProperty() 如果我已经有钥匙,我可以做 model = ndb.Key(urlsafe=key).get() model.title = "new tasks" model.put() 现在我需要存储新的实体,我该怎么做?谢谢 ndb.Model._kind_map['Tasks'](title='...') 或者更一般的东西,比

我需要存储数据,问题是我只知道模型的名称,它与种类名称相同

class Tasks(ndb.Model):
    title = ndb.StringProperty()
如果我已经有钥匙,我可以做

model = ndb.Key(urlsafe=key).get()
model.title = "new tasks"
model.put()
现在我需要存储新的实体,我该怎么做?谢谢

ndb.Model._kind_map['Tasks'](title='...')
或者更一般的东西,比如

eval('Tasks')(title='...')
在这两种情况下,都需要事先导入模型

if
models
是模型所在的python模块

或者更一般的东西,比如

eval('Tasks')(title='...')
在这两种情况下,都需要事先导入模型


如果
模型
是模型所在的python模块。

让用户能够实例化和存储任何类型的模型可能是一个非常糟糕的主意,因此直接映射可能是错误的方法。此外,它还直接将内部数据存储表示与外部API相耦合,这会带来额外的限制

相反,您可能希望自己定义映射,如下所示:

model_map = {
    'external_name': model.MyModel,
    # ...
}

让用户能够实例化和存储任何类型的模型可能是一个非常糟糕的想法,因此直接映射可能是错误的方法。此外,它还直接将内部数据存储表示与外部API相耦合,这会带来额外的限制

相反,您可能希望自己定义映射,如下所示:

model_map = {
    'external_name': model.MyModel,
    # ...
}
对于DB

from google.appengine.ext.db import class_for_kind
class_for_kind(model_name) -> returns model Class
对于NDB

from google.appengine.ext import ndb
ndb.Model._kind_map[model_name] -> returns model Class
对于DB

from google.appengine.ext.db import class_for_kind
class_for_kind(model_name) -> returns model Class
对于NDB

from google.appengine.ext import ndb
ndb.Model._kind_map[model_name] -> returns model Class

您无法在代码中导入任务模型的原因是什么?我正在为我的小型移动项目实现自己的restful和oauth API,导入模型不是问题,可以通过“从模型导入*”来完成,我没有模型对象的原因是,我从appspot.com/restful/v1/tasks/中的url获取模型种类名称作为字符串,因此,您不能在代码中导入任务模型的原因是什么?我正在为我的小移动项目实现我自己的restful和oauth API,导入模型不是问题,可以通过“from Model import*”来完成,我没有模型对象的原因是,我从url中获取模型种类名称,如appspot.com/restful/v1/tasks/中的字符串。非常感谢,我知道“eval”,但我想避免它,以免减慢脚本的速度,ndb.Model.kind_映射对我来说很好,谢谢。这涉及到DB API的内部。不推荐这样做。另外,对用户数据使用“eval”是一个非常非常非常糟糕的想法。好吧,如果你至少有两个单元测试覆盖了一段基于ndb.Model的代码。\u kind\u map,我个人认为这没那么糟糕。eval()-完全同意你的观点。这里有几个备选方案。非常感谢,我知道“eval”,但我想避免它,以免减慢脚本的速度,ndb.Model.kind_map对我来说很好,谢谢。这涉及到深入DB API的内部。不推荐这样做。另外,对用户数据使用“eval”是一个非常非常非常糟糕的想法。好吧,如果你至少有两个单元测试覆盖了一段基于ndb.Model的代码。\u kind\u map,我个人认为这没那么糟糕。eval()-完全同意你的观点。它只是为了几个选择。