Google App Engine数据存储区中的Where子句

时间:2015-12-15 03:39:55

标签: python google-app-engine

我的Resource类的模型如下:

Resource.query(Resource.owner== 'abc@xyz.com').fetch()

我想提取所有者等于某个字符串的记录。 我尝试过以下查询。它不会给出错误,但也不会返回任何结果。

from tkinter import*
import tkinter as tk
import tkinter.simpledialog

def onChange(i):
    btn_list[i].config(text='Updating...',bg='red')  
    btn_list[i].grid(in_=root,row=rw[i],column=2)
    ans=tk.simpledialog.askfloat('Updating....', 'What is the current price?')
    if ans:        
        btn_list[i].config(text='RM{:,.2f}'.format(ans))
        btn_list[i].config(bg='yellow') 

root=Tk()
Title=['Item','Unit','Price']
Item=['Kopi O','Teh O','Teh Tarik']
Unit= '1 cup'
Price=[1,0.9,1.2]
cl=[0,1,2]
rw=[1,2,3]
btn_list=[]

for i in range(3):
    btnT1=tk.Button(root,text=Title[i],width=10,bg='light green')
    btnT1.grid(in_=root,row=0,column=cl[i])

for x in range(3):
    btnT2=tk.Button(root,text=Item[x],width=10)
    btnT2.grid(in_=root,row=rw[x],column=0)

for y in range(3):
    btnT3=tk.Button(root,text=Unit,width=10)
    btnT3.grid(in_=root,row=rw[y],column=1)             

for z in range(3):
    btnT4=tk.Button(root,text=('RM {:,.2f}'.format(Price[z])),bg='yellow',width=10,\
                command=lambda i=z:onChange(i))
    btnT4.grid(in_=root,row=rw[z],column=2)
    btn_list.append(btnT4)

root.mainloop()

根据我的理解,如果列具有重复值,则不应将其编入索引,这就是未对所有者编制索引的原因。如果我错了,请纠正我。

有人可以帮我弄清楚如何实现where子句的功能吗?

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:2)

试过这个。它第一次工作。您没有拥有“abc@xyz.com”所有者的资源实体,或者在放置实体时未对所有者属性编制索引(如果您在放置实体时索引= False,则可能会发生这种情况)。 / p>

我的测试:

Resource(id='1', owner='abc@xyz.com').put()
Resource(id='2', owner='abc@xyz.com').put()
resources = Resource.query(Resource.owner == 'abc@xyz.com').fetch()
assert len(resources) == 2

另外,您的评论:

  

根据我的理解,如果列具有重复值,则不应该   被索引,这就是为什么所有者没有索引。请纠正我   我错了。

你错了!

首先,数据存储模型中没有“列”的概念,因此我假设您的意思是“Property”。

接下来,澄清你的意思是“如果属性有重复值”:

  • 我假设您的意思是'在同一个模型中创建的多个实体,具有相同的特定属性值',在您的案例中为“所有者”。这对索引没有影响,每个实体都将按预期编制索引。
  • 或许你的意思是'具有允许多个值(即列表)的属性的单个实体',这也不会阻止索引。在这种情况下,将对列表中的每个项目多次索引实体。

进一步详细说明,除非将属性indexed=False添加到Property构造函数中,否则大多数属性(即接受基本类型的属性,如string,int,float等)都会自动编入索引。事实上,您真正需要担心索引的唯一时间是您需要执行更复杂的查询,这涉及查询更多的1个属性(即使这样,默认情况下,应用程序引擎开发服务器将自动创建索引您在本地index.yaml文件中),或使用不等式过滤器。

read the docs了解更多详情。

希望这有帮助!