gpt4 book ai didi

python - 使用 NDB 中的 Key 检索实体

转载 作者:行者123 更新时间:2023-12-01 05:43:34 24 4
gpt4 key购买 nike

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

我很清楚,要通过 ID 搜索章节,我需要通过祖先查询来搜索书籍。今天我了解到,如果我拥有所有 key ,我可以直接检索实体,而无需先获取书籍,然后获取章节,然后获取页面,这样:

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

我的疑问是:要通过页码等方式获取页面,我必须先获取章节吗?

例如:

class Book(ndb.Model):
name = ndb.StringProperty(required=True)

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

class Chapter(ndb.Model):
name = ndb.StringProperty(required=True)

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

class Page(ndb.Model):
pageNumber = ndb.IntegerProperty(default=1)
content = ndb.StringProperty(required=True)

# Search by page
@classmethod
def by_page(cls, number, chapter):
page = Page.query(ancestor=chapter.key)
page = page.filter(Page.pageNumber == int(number))
return page.get()

实际上,当我需要搜索页面以显示其内容时,我正在这样做:

getPage?bookId=5901353784180736&chapterId=5655612935372800&page=2

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

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

if bookId and chapterId and pageNumber:
# Must be a digit
if bookId.isdigit() and chapterId.isdigit() and pageNumber.isdigit():
# Get the chapter
chapter_key = ndb.Key('Book', long(bookId), 'Chapter', long(chapterId))
chapter = chapter_key.get()

if chapter:
# Get the page
page = Page.by_number(pageNumber, chapter)

这是正确的方法还是我缺少更好的方法,我只能访问数据存储,而不是两次?

如果这是正确的,我认为这种使用 NDB 的工作方式不会对数据存储产生任何影响,因为对此页面的重复调用总是会命中同一章节和页面的 NDB 缓存(因为我使用 get() 方法,它不是 fetch() 命令)。我的猜测对吗?

最佳答案

您可以通过执行祖先查询一次性完成此操作,而不是获取:

chapter_key = ndb.Key('Book', long(bookId), 'Chapter', long(chapterId))
page = Page.query(Page.pageNumber==pageNumber, ancestor=chapter_key)

关于python - 使用 NDB 中的 Key 检索实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834797/

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