数据模型-如何在GAE中构建实体



我是一名android开发人员。我有一个连接到服务器中MySql数据库的应用程序。现在我正计划将它们迁移到谷歌应用程序引擎。但我被如何构建我的实体所困扰。

有表"users"和表"books"。用户可以拥有多本书,一本书可以由多个人拥有。所以有一个参考表叫做"图书所有者"。此表中有一列称为读取的页数。因此,每个用户到预订的关系都有一个特殊的属性"否"。共页已读'。

使用MySql,我可以执行联接查询来获得我想要的所有信息。现在使用GAE,我们不能执行联接查询。我只想要这些,

  1. 用户拥有的所有书籍以及"否"。已读取的页面数'属性
  2. 特定书籍的所有者数量

当我查询用户时,我需要以下响应:

{"user_id":"123","user_name":"John Doe","books":[{"book_id":"123456", "book_name":"Some book name","pages_read":126},{"book_id":"123457","book_name":"Some book name","pages_read":26},{"book_id":"123458","book_name":"Some book name","pages_read":274},{"book_id":"123459","book_name":"Some book name","pages_read":48}]}

那么如何构建我的实体。如何查询它们?请给我一些建议/指点。已经谢谢了。

这里有一种方法:

class User(ndb.Model):
    [any data here you want]
class Book(ndb.Model):
    [any data here you want]
class OwnedBook(ndb.Model):
    user = ndb.KeyProperty(User)
    book = ndb.KeyProperty(Book)
    pages_read = ndb.IntegerProperty()

要让用户拥有的书籍阅读页面,请执行以下操作:

books_owned_by_user = OwnedBook.query(OwnedBook.user = user1)

在获得OwnedBook实体之后,您将需要进行进一步的查询以获得有关书籍的更多信息。

for owned_book in OwnedBook.query(OwnedBook.user = user1):
    book = owned_book.book.get()

您需要考虑如何为您的特定应用程序高效地执行此操作。

要获取一本书的所有者数量,请执行以下操作:

num_owners = OwnedBook.query(OwnedBook.book = book1).count()

最新更新