嵌套类选项卡上的GAE Python数据存储查询

2024-09-20 22:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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$MyNestedClass更改为MyNestedClass,但出现以下错误:

KindError: No implementation for kind 'OuterClass$MyNestedClass'

为了使python类正常工作,我必须将哪个名称分配给python类?我如何处理美元的问题?你知道吗

希望我说得够清楚,谢谢


解决方案

Matt's suggestion之后,我的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。你知道吗

谢谢!你知道吗


Tags: nameimportselfdbstringcountprivateclass
1条回答
网友
1楼 · 发布于 2024-09-20 22:59:33

请查看JDO annotations的资源。你知道吗

您可能需要这样注释您的类:

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'

相关问题 更多 >

    热门问题