gpt4 book ai didi

python - 与 GAE 的祖先一起工作

转载 作者:行者123 更新时间:2023-11-30 23:36:00 26 4
gpt4 key购买 nike

我只希望有人确认我正在以正确的方式做事。

我有这样的结构:有章节的书籍(ancestor=Book)有页面(ancestor=Chapter)

我很清楚,要通过 ID 搜索章节,我需要通过祖先查询来搜索书籍。

我的疑问是:我是否需要所有链式书籍章节才能搜索页面?

例如(我在 NDB):

class Book(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id):
return Book.get_by_id(long(id))

class Chapter(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id, book):
return Chapter.get_by_id(long(id), parent=book.key)

class Page(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id, chapter):
return Page.get_by_id(long(id), parent=chapter.key)

实际上,当我需要搜索页面以显示其内容时,我会在网址中传递完整的链,如下所示:

getPage?bookId=5901353784180736&chapterId=5655612935372800&pageId=1132165198169

所以,在 Controller 中,我做了这个:

def get(self):
# Get the id parameters
bookId = self.request.get('bookId')
chapterId = self.request.get('chapterId')
pageId = self.request.get('pageId')

if bookId and chapterId and pageId:
# Must be a digit
if bookId.isdigit() and chapterId.isdigit() and pageId.isdigit():
# Get the book
book = Book.by_id(bookId)

if book:
# Get the chapter
chapter = Chapter.by_id(chapterId, book)

if chapter:
# Get the page
page = Page.by_id(pageId, chapter)

这是正确的方法吗?我必须在 URL 中始终包含完整的链才能获取链的最终元素吗?

如果这是正确的,我认为这种使用 NDB 的工作方式不会对数据存储产生任何影响,因为对此页面的重复调用总是会命中同一本书、章节和页面的 NDB 缓存(因为我是通过 id 获取的,不是获取命令)。我的假设正确吗?

最佳答案

不,没有必要这样做。关键是键就是路径:您可以动态构建它们,并且只有在拥有完整的路径时才访问数据存储。在你的例子中,它是这样的:

page_key = ndb.Key(Book, bookId, Chapter, chapterId, Page, pageId)
page = page_key.get()

参见the NDB docs了解更多示例。

关于python - 与 GAE 的祖先一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com