現在、Google App Engine for Pythonでアプリケーションを作成しています。私は自分のデータストアの最初のレコードをフェッチしたいが、何らかの理由でこれがうまくいかない。これは私がMySQLの中でそれを行うだろうかです:GAEのNDBデータストアから最初のレコードを取得する
SELECT * FROM MyClass LIMIT 1;
私はNDBに新たなんだので、私は非常にこれがどのように機能するかのまわりで私の頭を包むように見えることはできません。私は例のためにthe documentationを読むことを試みたが、それらはかなり働かない。
これは私が現在持っているコードです:これは私の完全なスタックトレースである
from google.appengine.ext.ndb import Model as NdbModel
from google.appengine.ext.ndb import StringProperty
class Model(NdbModel):
@classmethod
def get_first(cls):
"""
Get the first record in the model datastore
:return: Model
"""
try:
return cls.query().fetch(1)[0]
except IndexError:
raise ModelException("No records found in [%s] datastore" % cls.__name__)
class MyClass(Model):
foo = StringProperty()
bar = StringProperty()
a = MyClass.get_first() # TypeError: 'NoneType' object does not support item assignment
:
TypeError: 'NoneType' object does not support item assignment
at _store_value (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py:1127)
at _deserialize (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py:1496)
at _from_pb (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py:3209)
at pb_to_entity (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py:691)
at pb_to_query_result (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py:201)
at _process_results (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_query.py:2980)
at __query_result_hook (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_query.py:2947)
at get_result (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py:613)
at _on_rpc_completion (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py:513)
at _run_to_list (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py:995)
at _help_tasklet_along (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py:427)
at get_result (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py:383)
at fetch (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py:1218)
at positional_wrapper (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/utils.py:160)
at get_first (/base/data/home/apps/s~project-id/v1.395271489319521947/project/core/models/utils.py:55)
at me (/base/data/home/apps/s~project-id/v1.395271489319521947/project/core/routes/api/v1/profile.py:22)
at dispatch_request (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1625)
at full_dispatch_request (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1639)
at handle_user_exception (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1544)
at full_dispatch_request (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1641)
at wsgi_app (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1988)
at handle_exception (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1567)
at wsgi_app (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:1991)
at __call__ (/base/data/home/apps/s~project-id/v1.395271489319521947/lib/flask/app.py:2000)
at Handle (/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py:267)
完全なトレースバックを表示します。しかし、データストアを通常のデータベースと考えるのは誤りです。順序付けの唯一の概念は索引によって提供されます。 –
私は 'ValueError:[MyClass] datastore'にレコードが見つかりませんでした(私は未定義の' ModelException'を 'ValueError'に置き換えました)。だからあなたの問題はどこかにあるかもしれません。また、 'first'は結果リストの最初のことを意味します。もしあなたが何か別の意味を持っていれば、ソートルールも提供する必要があります。 –
@DanielRosemanが私のスタックトレースを追加しました – Paradoxis