您好,我在 google appengine 中做一个非常小的应用程序,我使用 python。我的问题是我有两个使用 de db.model 的表(“clients”和“requests”)。表“client”有email和name字段,表“requests”有email和issue字段。如果两个表中的电子邮件相同,我想做一个查询,为每个请求返回电子邮件、问题和客户名称。有人可以帮忙吗?
问问题
967 次
2 回答
3
应用引擎数据存储不支持联接,因此您将无法使用 GQL 解决此问题。您可以使用两个获取,一个用于客户端,一个用于请求,或者您可以使用 ReferenceProperty 来建立两个实体之间的关系。
如果您需要对一对多关系进行建模,可以使用引用属性来完成。对于您的情况,它看起来像这样:
class Client(db.Model):
email = db.UserProperty()
name = db.StringProperty()
class Request(db.Model):
client = db.ReferencePrpoerty(Client, collection_name='requests')
issue = db.StringProperty()
任何具有与其关联的 Request 的 Client 实体将自动获得一个名为requests的属性,该属性是一个 Query 对象,它将返回所有 Request 实体,这些实体将client字段设置为您正在处理的特定 Client 实体。
您可能还想确保创建请求实体的代码将每个新实体设置为将特定用户的客户端实体作为其祖先。将这些关联项目保留在同一个实体组中可能有助于性能原因和事务处理。
于 2010-01-04T23:50:40.577 回答
0
使用这个模型:
class Client(db.Model):
email = db.StringProperty()
name = db.StringProperty()
class Request(db.Model):
client = db.ReferenceProperty(Client, collection_name='requests')
issue = db.StringProperty()
用这段代码可以查询数据
from modelos import Client,Request
ctes=Client.all().filter("email =","somemail@mailbox.com.mx")
for ct in ctes:
allRequest4ThisUser=Request.all().filter("client =",ct)
for req in allRequest4ThisUser:
print req.issue
于 2010-01-13T01:13:41.550 回答