GQLクエリは一致しないのはなぜ?
-
21-08-2019 - |
質問
私は何をしたいURIを持つページを保持いくつかのミニCMSを構築している。
そのページを表示している場合があり、現在の要求の同じURIで利用可能なページだ、とあれば、データストアでチェック私のviews.py内の関数への私のurls.pyポイントの最後のルートます。
私はモデルを持っています:
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})
そして、私は、データストアへのURIとして「/仕事」でエンティティを追加しました。
request.pathは「/仕事は」正確であっても、クエリが一致を返しません。
あなたが私を与えることができます何かアドバイスをありがとう!
そして、はい、私はPythonのnoobのだ、App Engineは最終的には、言語を学ぶのに最適です。
解決
私は解決策を見つけた!
問題がモデルです。
アプリケーションエンジンのデータストアではなく、インデックス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 =: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()
所属していません StackOverflow