[英]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$MyNestedClass
為MyNestedClass
,但出現此錯誤:
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.