Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 为什么GQL查询不匹配?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 为什么GQL查询不匹配?

Python 为什么GQL查询不匹配?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我想做的是构建一些迷你cms,其中包含带有uri的页面 my urls.py中的最后一个路由指向my views.py中的一个函数,该函数检查数据存储中是否有与当前请求具有相同uri的页面,如果有,则显示该页面 我有一个模型: class Page(db.Model): title = db.StringProperty(required=True) uri = db.TextProperty(required=True) created = db.DateTimeProper

我想做的是构建一些迷你cms,其中包含带有uri的页面

my urls.py中的最后一个路由指向my views.py中的一个函数,该函数检查数据存储中是否有与当前请求具有相同uri的页面,如果有,则显示该页面

我有一个模型:

class Page(db.Model): 
  title = db.StringProperty(required=True) 
  uri = db.TextProperty(required=True) 
  created = db.DateTimeProperty(auto_now_add=True) 
  modified = db.DateTimeProperty(auto_now=True) 
  content = db.TextProperty() 
我认为:

def show(request): 
  page = db.GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get() 
  if page is None: 
    return http.HttpResponseNotFound() 
  else: 
    return respond(request, 'pages_show', {'content': request.path}) 
我在数据存储中添加了一个以“/work”作为uri的实体

即使request.path正好是“/work”,查询也不会返回匹配项

谢谢你给我的建议


是的,我是PythonNoob,AppEngine非常适合最终学习这门语言

如果使用命名关键字参数(“uri=:uri”),则必须将参数显式绑定到命名关键字。而不是:

# incorrect named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', request.path).get()
你想要

# correct named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get()
也可以只使用位置参数:

# correct positional parameter
GqlQuery('SELECT * FROM Page WHERE uri=:1', request.path).get()

如果使用命名关键字参数(“uri=:uri”),则必须将参数显式绑定到命名关键字。而不是:

# incorrect named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', request.path).get()
你想要

# correct named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get()
也可以只使用位置参数:

# correct positional parameter
GqlQuery('SELECT * FROM Page WHERE uri=:1', request.path).get()

我找到了解决办法

问题在于模型

App engines数据存储不索引TextProperty。使用该类型从一开始就是错误的,所以我将其更改为StringProperty,它确实会被索引,因此允许我们在WHERE子句中使用哪个数据存储

工作模式示例:

   class Page(db.Model): 
      title = db.StringProperty(required=True) 
      // string property now
      uri = db.StringProperty(required=True) 
      created = db.DateTimeProperty(auto_now_add=True) 
      modified = db.DateTimeProperty(auto_now=True) 
      content = db.TextProperty()

我找到了解决办法

问题在于模型

App engines数据存储不索引TextProperty。使用该类型从一开始就是错误的,所以我将其更改为StringProperty,它确实会被索引,因此允许我们在WHERE子句中使用哪个数据存储

工作模式示例:

   class Page(db.Model): 
      title = db.StringProperty(required=True) 
      // string property now
      uri = db.StringProperty(required=True) 
      created = db.DateTimeProperty(auto_now_add=True) 
      modified = db.DateTimeProperty(auto_now=True) 
      content = db.TextProperty()

是的,我举了一个错误的例子。即使使用命名参数或位置参数,我仍然得到相同的结果。现在更正了样本,谢谢!是的,我举了一个错误的例子。即使使用命名参数或位置参数,我仍然得到相同的结果。现在更正了样本,谢谢!实际上,您根本不需要uri属性。如果您创建的页面实体的key_name等于URI,您可以在Page.get_by_key_name(URI)中查找,这样您就可以免费获得唯一性!啊,好主意,蜘蛛纲动物。我想为你的小费+1:-)谢谢!非常感谢你。我也在做同样的事情,不明白为什么查询不起作用。你的帖子让我免于发疯。你根本不需要uri属性。如果您创建的页面实体的key_name等于URI,您可以在Page.get_by_key_name(URI)中查找,这样您就可以免费获得唯一性!啊,好主意,蜘蛛纲动物。我想为你的小费+1:-)谢谢!非常感谢你。我也在做同样的事情,不明白为什么查询不起作用。你的帖子使我免于发疯。