Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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

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
应用程序引擎(python)建模关系,我做错了吗?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

应用程序引擎(python)建模关系,我做错了吗?

应用程序引擎(python)建模关系,我做错了吗?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,使用下面的模型,我试图找到一种生成各种新闻提要的方法,这样当用户登录时,他们会看到一个即将发生的事件列表,这些事件是他们选择关注的。我是否能够查询类似“从UserprofileInstance.following中的Barevent WHERE parent_栏中选择*”之类的内容?如果是这样,这是否有效 class Barprofile(db.Model): b_user = db.UserProperty() created = db.Dat

使用下面的模型,我试图找到一种生成各种新闻提要的方法,这样当用户登录时,他们会看到一个即将发生的事件列表,这些事件是他们选择关注的。我是否能够查询类似“从UserprofileInstance.following中的Barevent WHERE parent_栏中选择*”之类的内容?如果是这样,这是否有效

class Barprofile(db.Model):
    b_user          = db.UserProperty()
    created         = db.DateTimeProperty(auto_now_add=True)
    barname         = db.StringProperty()
    address         = db.PostalAddressProperty()
    zipcode         = db.StringProperty()

class Barevent(db.Model):
    created         = db.DateTimeProperty(auto_now_add=True)
    when            = db.DateProperty()
    starttime       = db.TimeProperty()
    endtime         = db.TimeProperty()
    description     = db.StringProperty(multiline=True)
    parent_bar      = db.ReferenceProperty(Barprofile, collection_name='bar_events')

class Userprofile(db.Model):
    b_user          = db.UserProperty()
    following       = db.ListProperty(db.Key)

有很多方法可以进行GAE查询,但我不明白为什么你的方法不起作用。 如果您有一个特定的Barprofile(B),那么我认为您可以(在Python中)这样做

但是我不太清楚为什么你有一个Userprofile和一个Barprofile(所以我想你应该重新考虑这三个)


一般来说,您不需要(甚至不想)像在传统RDBMS环境中那样在GAE中规范化数据。用这种方式规范化数据已经没有什么特别的好处了,也就是说,您现在可以在应用程序级别进行规范化,而不是将其添加到数据库中以确保一致性。

您的模型和查询应该可以正常工作,而且不会低效。您需要记住的一件事是,如果删除了Barprofile实体,您可能需要手动从每个Userprofile的以下属性中删除它们的键。具有孤立的Barprofile引用不会中断查询,但是如果您将该列表用于其他目的(例如向用户显示他或她订阅的酒吧),如果您尝试查询该键,则会出现错误。

您描述的结构将起作用,但请记住,“in”操作符需要对列表中的每个项执行一个查询,因此可能会导致大量查询


然而,你要处理的是一个类似于推特的“分散-聚集”问题,所以你没有太多选择-你要么在阅读时收集信息,要么在更新时向所有收听的用户广播。

谢谢亚当。我只是需要确认一下我是否走上了正确的道路。谢谢你的确认,尼克,我担心这会产生很多疑问。我得绞尽脑汁,看看能不能找到一种有效的方法来缓存其中的一些。
   query = db.GqlQuery("SELECT * FROM Barevent WHERE parent_bar = :1,
                            B.b_user)
   day = query.get()