Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用动态属性名调用GAE NDB查询_Python_Google App Engine - Fatal编程技术网

Python 使用动态属性名调用GAE NDB查询

Python 使用动态属性名调用GAE NDB查询,python,google-app-engine,Python,Google App Engine,谷歌AppEngine NDB查询是奇怪的野兽。 假设我有一个Car类(和ndb实体) 具有颜色和重量属性。 我能行 Car.query(Car.color == "blue") 我从未见过任何关于这种“函数调用”的Python 2文档。 传递了多少个参数?从逻辑上讲,应该是这样 这是一个布尔值,但显然“查询”可以找到源代码 该参数的代码,并获取Car.color、==和“blue”。 开发人员是否可以定义此类函数, 或者这是某种编译器黑客 我真正的问题是我有一个用户输入对话框 类的字段(本例

谷歌AppEngine NDB查询是奇怪的野兽。 假设我有一个Car类(和ndb实体)
具有颜色和重量属性。 我能行

Car.query(Car.color == "blue")
我从未见过任何关于这种“函数调用”的Python 2文档。 传递了多少个参数?从逻辑上讲,应该是这样 这是一个布尔值,但显然“查询”可以找到源代码 该参数的代码,并获取Car.color、==和“blue”。 开发人员是否可以定义此类函数, 或者这是某种编译器黑客

我真正的问题是我有一个用户输入对话框 类的字段(本例中为“Car”) 属性(本例中为“颜色”) 和值(本例中为“蓝色”)。 如何构造和调用接受这些输入的查询?

这是由python完成的,您的示例使用了
\uuuuuuueq\uuuu

要构造查询,可以使用以下内容:

Car.query(getattr(Car, 'color') == 'red')

一定要通过调用hasattr(Car,'color')来检查属性是否存在。

magic methods文档中有很多关于python反直观设计的文档,特别是w.r.t.中缀操作符。但它并没有解决查询的调用机制问题,我们让查询方法的主体显然从调用源代码中获取不可用的信息。这个
Car.color==“blue”
返回特定值,在这种情况下,它的筛选器对象带有特定的参数,这很容易。调用机制没有问题。您正在使用参数调用查询。恰好表达式'Car.color==“blue”'解析为一个过滤器对象,该对象按照任何标准python调用约定传递给查询。您需要了解表达式和单个参数之间的区别
expression=Car.colr=='blue'
然后查询(expression)==记录在Python 2文档中,以返回True或False。谷歌巧妙地克服了这种预期行为,为字段对象提供了一个特殊的==定义来返回一个过滤对象。我在这段代码中遇到了一个错误,因为默认情况下TextProperty字段没有索引(与大多数其他实体属性一样)。再加上糟糕的错误信息和TextProperty的异常行为,谷歌这样一个聪明的黑客行为弊大于利。迪米特里、蒂姆和我那令人沮丧的时间让我能够解决这些语言设计缺陷。希望这个帖子能帮助其他人克服谷歌的错误。