Google app engine 谷歌应用程序引擎&x27;s ndb:使用id或密钥名?
这是关于谷歌应用引擎的ndb。根据我的观察,如果我在不提供任何键的情况下创建一个实体,该实体将在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
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()