В идеале вы должны получить нужный объект по ключу вместо загрузки всей таблицы.
Немного сложно дать вам точный код, поскольку я не могу сказать, какую библиотеку вы используете для доступа к хранилищу данных. Я всегда использовал ndb
, но кажется, что вы используете это:
https://googleapis.github.io/google-cloud-python/latest/datastore/index.html
Чтобы получить по ключу, вы должны сделать:
from google.cloud import datastore
from google.cloud.datastore.key import Key
ds = datastore.Client()
oneItem = ds.get(Key(u'users', 5633378543992832L, project=project))
и затем на этом этапе просто взаимодействуйте с ним oneItem['password']
Идентификатор 5633378543992832L
должен быть предоставлен вам из текущего сеанса. Таким образом, вам нужно будет только запрос во время создания сеанса. Примерно так:
def create_session(username, raw_password):
client = datastore.Client()
query = client.query(kind=u'users')
query.add_filter('username', '=', username)
query.add_filter('password', '=', _your_password_hash_function(raw_password))
results = query.fetch(1)
if results:
return _create_session_for_user(results[0])
raise Exception("Invalid username/password")
Вам нужно будет добавить индекс для работы вышеуказанного запроса. Кажется, вы не используете движок приложений, поэтому вам, вероятно, придется добавлять индексы через веб-консоль