簡體   English   中英

GAE Python數據存儲-嵌套類表查詢

[英]GAE Python Datastore - query on nested class table

我有一個Java類,其中包含一些嵌套類,如下所示:

public class OuterClass{

    @PrimaryKey
    private String id;

    @Persistent
    private String name;

    // --- blah blah

    static class MyNestedClass{
        //--- properties declaration
    }
}

此類工作正常,基本上只在一個結構(OuterClass)中,我可以存儲n個嵌套結構,每個結構都可以用作數據存儲表。

使用datastore viewer檢查我的ds,我發現現在有了一個名為OuterClass$MyNestedClass的表,可以像下面這樣在該表上成功運行GQL查詢:

//--- note the wrapping quotation marks on the table name
SELECT * FROM "OuterClass$MyNestedClass" where something = '100'

到現在為止一切正常。 現在,我需要創建一個清空嵌套類表的google app engine python方法。 我已經使用其他表/類做到了這一點,但是從來沒有使用嵌套類。

這是我的python代碼:

import cgi
import datetime
import urllib
import webapp2

from google.appengine.ext import db

class OuterClass$MyNestedClass(db.Model):
    name = db.StringProperty()
    surname= db.StringProperty()
    age = db.StringProperty()

class emptyMyNestedClassHandler(webapp2.RequestHandler):
    def get(self):
        nestedclass= db.GqlQuery("SELECT __key__ FROM \"OuterClass$MyNestedClass\"")
        count = 0

        for p in nestedclass:
            count += 1
        db.delete(nestedclass)

        self.response.out.write("Deleted SMyNestedClass Entities: " + str(count))

app = webapp2.WSGIApplication([
    ('/emptyMyNestedClass', emptyMyNestedClassHandler)
], debug=True)

這是我得到的錯誤

class OuterClass$MyNestedClass(db.Model):
                ^
SyntaxError: invalid syntax

我試圖將類名稱從OuterClass$MyNestedClassMyNestedClass ,但出現此錯誤:

KindError: No implementation for kind 'OuterClass$MyNestedClass'

我必須為我的python類分配哪個名稱才能使其工作? 如何處理$問題?

希望我已經足夠清楚了,謝謝


按照Matt的建議 ,我的JAVA類現在看起來像這樣:

public class OuterClass{

    @PrimaryKey
    private String id;

    @Persistent
    private String name;

    // --- blah blah
    @PersistenceCapable( table="NestedClass")
    @Embedded
    static class NestedClass{
        //--- properties declaration
    }
}

這是Python代碼:

import cgi
import datetime
import urllib
import webapp2

from google.appengine.ext import db

class NestedClass(db.Model):
    name = db.StringProperty()
    surname = db.StringProperty()
    age = db.StringProperty()

class emptyNestedClassHandler(webapp2.RequestHandler):
    def get(self):
        nestedclass= db.GqlQuery("SELECT __key__ FROM NestedClass")
        count = 0

        for p in nestedclass:
            count += 1
        db.delete(nestedclass)

        self.response.out.write("Deleted NestedClassEntities: " + str(count))

app = webapp2.WSGIApplication([
    ('/emptyNestedClass', emptyNestedClassHandler)
], debug=True)

請注意,我必須聲明類NestedClass

謝謝!

查看此資源的JDO批注

您可能想要像這樣注釋您的班級:

public class OuterClass{

    @PrimaryKey
    private String id;

    @Persistent
    private String name;

    // --- blah blah
    @PersistenceCapable( table="NestedClass")
    @Embedded
    static class NestedClass{
        //--- properties declaration
    }
}

通過GQL,您應該可以執行以下操作:

SELECT * FROM "OuterClass" where NestedClass.something = '100'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM