Python 为什么GQL查询不匹配?
我想做的是构建一些迷你cms,其中包含带有uri的页面 my urls.py中的最后一个路由指向my views.py中的一个函数,该函数检查数据存储中是否有与当前请求具有相同uri的页面,如果有,则显示该页面 我有一个模型: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
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:-)谢谢!非常感谢你。我也在做同样的事情,不明白为什么查询不起作用。你的帖子使我免于发疯。