Python解析模块执行Query.filter或Query.get时出错

标签 python parse-platform

使用 www.parse.com 并遵循以下说明:

https://github.com/dgrtwo/ParsePy

Python 2.7.3(默认,2012 年 8 月 1 日,05:14:39)

我创建了一个名为 testClass 的类

class testClass(Object):
    """Create a Test Class Object"""
    testId = ''
    def __init__(self,param):
        logging.info("testClass() New testClass object created()")
        print 'testClass() New testClass object created()'
        self.testId = param

我可以使用以下方法在 Parse 中创建新对象:

def testClassFromParse(param):
    try:
        testObj = testClass(param)
        testObj.save()
        hello = testClass.Query.filter(objectId='TQysq4uOp6')
        print type(hello)
        print hello
    except Exception,e:
        print traceback.format_exc()
        print 'testClassFromParse() Error'

每次执行时,我的新行都会在 Parse Dashboard 中成功创建,但是当我想根据示例使用 testId 或 objectId 检索对象时,我得到:

testClass() New testClass object created()
<class 'parse_rest.query.Queryset'>


File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 58, in get
    return self.filter(**kw).get()
  File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 142, in get
    results = self._fetch()
  File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 117, in _fetch
    return self._manager._fetch(**options)
  File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 41, in _fetch
    return [klass(**it) for it in klass.GET(uri, **kw).get('results')]
TypeError: __init__() got an unexpected keyword argument 'objectId'

testClassFromParse() Error

我可以通过我的仪表板确认 objectId 存在。 还尝试了不同的属性:testID,但结果相同。

有什么想法吗,如何检索对象然后访问其元素?

谢谢

最佳答案

问题在于您为 testClass 对象 定义了一个 __init__ 方法来替换内置方法。如 documentation 中所述,应该创建一个 Parse 对象,如下所示:

class GameScore(Object):
    pass

欢迎您向类添加额外的、特定于应用程序的方法,但如果您替换 __init__ 方法(就像您对 __init__(self, param) 所做的那样) ),当该对象从 Parse 获取返回值时,将无法再构建该对象。

在类中设置 testId 的正确方法是将其作为命名参数提供:

class testClass(Object):
    pass

testObj = testClass(testId=param)
<小时/>

现在,假设您确实希望在类初始化时执行某些行为:例如,在您的 __init__ 中,您需要提供 testId,并且您已经拥有了它每次创建对象时记录一条消息。您可以通过编写 __init__ 方法来完成此操作,然后在完成后调用父类(super class)的 __init__ 方法:

class testClass(Object):
    """Create a Test Class Object"""
    def __init__(self, **kwargs):
        logging.info("testClass() New testClass object created()")
        print 'testClass() New testClass object created()'

        assert "testId" in kwargs

        Object.__init__(self, **kwargs)

关于Python解析模块执行Query.filter或Query.get时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292220/

相关文章:

python - 如何检查 docker 实例是否正在运行?

python - 如何应用最大缓存大小来内存?

ios - 在pfcloud函数中返回 bool 值

iOS - Parse.com 导出数据自动化

python - Doctest 在 Sphinx 中不起作用,无法导入 python 文件 Python

python - 在 WTForms 字段上设置数据属性

python - Blender 2.5 Python 动画世界纹理设置

ios - 我可以从解析中检索信息,也可以打印该数组,但是当我尝试将这些数组元素放入 tableviewcell 时,什么也没有显示

typescript - 如何使用 Typescript 而不是 Javascript 在解析服务器中编写云代码?

android - 使用 Parse SDK : Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating 在 Android 13 上崩溃