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
Google app engine 谷歌应用程序引擎&x27;s ndb:使用id或密钥名?_Google App Engine - Fatal编程技术网

Google app engine 谷歌应用程序引擎&x27;s ndb:使用id或密钥名?

Google app engine 谷歌应用程序引擎&x27;s ndb:使用id或密钥名?,google-app-engine,Google App Engine,这是关于谷歌应用引擎的ndb。根据我的观察,如果我在不提供任何键的情况下创建一个实体,该实体将在ID字段中有一个整数,从1开始,是递增的,如datastoreviewer中所示。但是,如果我通过提供一个字符串作为其id来创建实体,那么该实体将在键名字段中有一个字符串。例如: 型号: class Member(ndb.Model): ... 节目: member1 = Member() # --> ID is 1, Key Name is None member2

这是关于谷歌应用引擎的ndb。根据我的观察,如果我在不提供任何键的情况下创建一个实体,该实体将在
ID
字段中有一个整数,从1开始,是递增的,如datastoreviewer中所示。但是,如果我通过提供一个字符串作为其id来创建实体,那么该实体将在
键名
字段中有一个字符串。例如:

型号:

class Member(ndb.Model):
  ...
节目:

member1 = Member()            # --> ID is 1, Key Name is None
member2 = Member(id='abc')    # --> ID is empty, Key Name is 'abc'
另外,在html文件中,如果我使用

<input ... name="id" value={{member1.key.id}} ... />
但是,以下html和程序代码:

<input ... name="id" value={{member2.key.id}} ... />
member2 = Member.get_by_id(self.request.get('id'))

member2=Member.get\u by\u id(self.request.get('id'))
将为member2工作

通过提供字符串id(即member2)创建的实体似乎没有问题。但这对member1不起作用。我的问题:a)我的观察是否正确?b) 如何使用
get\u by\u id()

a)获取member1基本正确,不过您应该能够通过显示的第二种方法获取
member1
。也无法验证整数ID始终从1开始,并且始终是递增的。在这方面,我看到的结果好坏参半

b)
member1=Member.get\u by\u id(int(self.request.get('id'))
应该可以工作

您也可以尝试使用
key.urlsafe()
,这样就不必担心密钥id转换:


您是否已获取所有成员并检查其密钥,以便了解1。你实际上写了member1和member2?和2。您实际创建了哪些关键点感谢您确认我的一些观察结果。经过更多的实验,我得出以下结论。如果创建的实体没有id(例如,
member1=Member()
),那么它的id是一个整数,可以通过
member1=Member.get\u by\u id(int(self.request.get('id'))
获取。但是,如果实体是用id创建的(例如,
member2=Member(id='abc')
),那么它的键名是'abc',可以通过
member2=Member.get\u-by\u-id(self.request.get('id'))获取它。
。它们在HTML中使用相同的模板变量:
{{member1.key.id}}和{{member2.key.id}}
将长数字从allocate\u id转换为int安全吗?还是可以在转换过程中截断整数?
<input ... name="id" value={{member2.key.id}} ... />
member2 = Member.get_by_id(self.request.get('id'))
member_key = self.request.get('id')
member = ndb.Key(urlsafe=member_key).get()