簡體   English   中英

資料儲存庫篩選器查詢上的GAE Python TypeError

[英]GAE Python TypeError on datastore filter query

我將這樣的實體保存在一個RequestHandler中,並且可以通過SDK控制台進行驗證:

class Moment(db.Model):
    user = db.IntegerProperty()
    index = db.IntegerProperty()

編輯:我以前只包括部分類定義,並且沒有顯示我是如何編寫模型的。 以下是完整的示例:

class Moment(db.Model):
    user = db.IntegerProperty()
    index = db.IntegerProperty()
    date = db.DateTimeProperty()
    qx = db.FloatProperty()
    qy = db.FloatProperty()
    qz = db.FloatProperty()
    qw = db.FloatProperty()
    latitude = db.FloatProperty()
    longitude = db.FloatProperty()
    image = db.BlobProperty()
    def __init__(self, obj):
        super(Moment,self).__init__()
        self.user = obj['user']
        self.index = obj['index']
        self.date = obj['date']
        self.qx = obj['qx']
        self.qy = obj['qy']
        self.qz = obj['qz']
        self.qw = obj['qw']
        self.latitude = obj['latitude']
        self.longitude = obj['longitude']
        self.image = obj['image']

class UploadHandler(webapp2.RequestHandler):
    def post(self):
        obj = biplist.readPlistFromString(self.request.body)
        Moment(obj).put()

當我嘗試過濾時得到...

class ServeHandler(webapp2.RequestHandler):
    def get(self):
        params = {}
        params['user'] = int(self.request.get('user'))
        params['index'] = int(self.request.get('index'))
        q = Moment.all()
        q.filter("user =", params['user'])
        q.filter("index =", params['index'])
        print q.get()

我得到以下內容:

ERROR    2012-11-04 06:56:04,846 webapp2.py:1553] __init__() got an unexpected keyword argument 'index'
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "<path>/main.py", line 51, in get
    print q.get()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 2102, in get
    return results.next()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 2314, in next
    return self.__model_class.from_entity(self.__iterator.next())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 1442, in from_entity
    return cls(None, _from_entity=entity, **entity_values)
TypeError: __init__() got an unexpected keyword argument 'index'
INFO     2012-11-04 06:56:04,849 dev_appserver.py:3092] "GET /serve?user=0&index=0 HTTP/1.1" 500 -

但是,如果我print q.count()而不是print q.get()我將得到1。似乎根據文檔,我正在正確地進行操作,並且我嘗試了類似的問題(但無濟於事)的建議。

SDK v1.7.3

受到對我的問題的評論以及一些錯誤的想法的啟發,並發現了其他類似的問題/答案,我重新評估了處理Model類的方式。 事實證明,至少我重寫類構造函數的方式,我相信我在超類處理初始化的方式方面有所突破。 以下對我來說現在可以正常工作:

class Moment(db.Model):
    user = db.IntegerProperty()
    index = db.IntegerProperty()
    date = db.DateTimeProperty()
    qx = db.FloatProperty()
    qy = db.FloatProperty()
    qz = db.FloatProperty()
    qw = db.FloatProperty()
    latitude = db.FloatProperty()
    longitude = db.FloatProperty()
    image = db.BlobProperty()

class UploadHandler(webapp2.RequestHandler):
    def post(self):
        obj = biplist.readPlistFromString(self.request.body)
        Moment(user = obj['user'],
               index = obj['index'],
               date = obj['date'],
               qx = obj['qx'],
               qy = obj['qy'],
               qz = obj['qz'],
               qw = obj['qw'],
               latitude = obj['latitude'],
               longitude = obj['longitude'],
               image = obj['image']).put()

暫無
暫無

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

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