2010-01-04 31 views
0

你好,我在谷歌appengine做一個非常小的應用程序,我使用python。 我的問題是,我有兩個表使用de db.model(「客戶端」和「請求」)。表「客戶」已經得到了電子郵件和名稱字段,而表「請求」獲得了電子郵件和問題字段。如果電子郵件在兩個表中相同,我想要爲每個請求返回電子郵件,問題和客戶端名稱。任何人都可以幫忙嗎?GQL與兩張表

回答

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實體作爲其祖先。將這些關聯的項目保存在同一個實體組中可能對性能原因和事務有所幫助。使用

+0

你好。謝謝。客戶端使用Gmail電子郵件帳戶登錄應用程序。一個客戶可以做很多請求。作爲管理員,我希望看到一個列表,其中包含來自所有客戶端的所有請求,其中包含來自表客戶端的表請求和客戶端名稱的所有客戶端請求... – 2010-01-06 20:15:18

+0

谷歌說: obj1,具有ref_property可以有(許多)obj2這是引用的obj) – 2010-06-19 21:04:40

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 =","[email protected]") 

for ct in ctes: 
    allRequest4ThisUser=Request.all().filter("client =",ct) 
    for req in allRequest4ThisUser: 
    print req.issue