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_One To Many - Fatal编程技术网

Python 数据存储中的一对多关系

Python 数据存储中的一对多关系,python,google-app-engine,google-cloud-datastore,one-to-many,Python,Google App Engine,Google Cloud Datastore,One To Many,Rafe Kaplan很好地解释了数据存储中的1对多关系。我尝试将其应用于用户和场馆的简单情况。所以用户可以去很多餐馆;我想打印用户电子邮件和用户去过的餐厅: class User(db.Model): userEmail = db.StringProperty() class Venue(db.Model): user = db.ReferenceProperty(User, collection_name

Rafe Kaplan很好地解释了数据存储中的1对多关系。我尝试将其应用于
用户
场馆
的简单情况。所以用户可以去很多餐馆;我想打印用户电子邮件和用户去过的餐厅:

class User(db.Model):
    userEmail = db.StringProperty()

class Venue(db.Model):
    user = db.ReferenceProperty(User,
                                   collection_name="venues")
    venue = db.StringProperty()

class OneToMany(webapp.RequestHandler):
    def get(self):
        scott = User(userEmail="scott@example.com")
        scott.put()
        Venue(user=scott,
                     venue="club1").put()
        Venue(user=scott,
                    venue="club2").put()

        for v in scott.venues:
            self.response.out.write(v.venue)
这将打印
“club1 club2”

但我想关联
”scott@example.com“
他去过的地方;所以我想打印这样的内容:
“scott@example.com:club1,club2“

尝试

for v in scott.venues:
    self.response.out.write(userEmail)
    self.response.out.write(v.venue)
给出了错误:

self.response.out.write(userEmail)
NameError: global name 'userEmail' is not defined
正确的做法是什么?谢谢

EDIT2(回复:vonPetrushev的回答)

这似乎有效:

query = User.all()
    query.filter("userEmail =", "scott@example.com")
    results=query.fetch(1)
    scott=results[0]
    self.response.out.write("%s went to:" % scott.userEmail)
    for venue in scott.venues:
        self.response.out.write(venue.venue)
显示:

scott@example.com转到:club12club22

编辑(回复:vonPetrushev的回答)

我有点困惑

所以我想写一个这样的查询

query = User.all()
query.filter("userEmail =", "scott@example.com")
并显示与此用户关联的所有场地


尚不清楚
用户
场馆
是如何连接的。

用户电子邮件
不是
for
循环范围内的定义名称。您需要的是:

for v in scott.venues:
    self.response.out.write(scott.userEmail)
    self.response.out.write(v.venue)
编辑:关于您的编辑-如果您的目标是进行联合查询-您不能,谷歌应用程序数据存储除外。但是,您可以这样抓住用户:

query = User.all()
query.filter("userEmail =", "scott@example.com")
results=query.fetch(1)
scott=results[0]

然后获得场地,如scott.Vinces。关系定义在带有
db.ReferenceProperty
的行中,它定义了什么是
someuser.Vinces
和什么是
SomeVincement.user

谢谢这项工作并打印:
scott@example.com俱乐部1scott@example.comclub22
我添加了一个
编辑
,因为我不知道如何查询用户并获取其所有场地。