Firebase 在Python中高效解析数据存储实体
现在,datastoreFirebase 在Python中高效解析数据存储实体,firebase,nosql,google-cloud-datastore,datastore,Firebase,Nosql,Google Cloud Datastore,Datastore,现在,datastoreds.query(kind='users')以以下形式返回我一个响应: <Entity(u'users', 5633378543992832L) {u'username': u'xyz', u'user_ip': '127.0.0.1', u'name': u'xyz', u'password': 'something', u'register_date': datetime.datetime(2019, 3, 8, 5, 50, 1, 443212, tzinfo
ds.query(kind='users')
以以下形式返回我一个响应:
<Entity(u'users', 5633378543992832L) {u'username': u'xyz', u'user_ip': '127.0.0.1', u'name': u'xyz', u'password': 'something', u'register_date': datetime.datetime(2019, 3, 8, 5, 50, 1, 443212, tzinfo=<UTC>)}>
并通过something=result['password']访问任何属性
它工作正常,但效率极低。是否有任何方法可以直接访问任何特定属性而不使用for循环或其他数据结构?类似于在JSON中访问值
我正在使用google.cloud导入数据存储中的
,理想情况下,您应该通过键检索所需的对象,而不是加载整个表
给您提供精确的代码有点困难,因为我无法告诉您使用哪个库访问数据存储。我一直在使用ndb
,但您似乎正在使用这个:
要通过密钥获取,请执行以下操作:
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']
应在当前会话中向您提供id5633378543992832L
。因此,您只需要在会话创建期间进行查询。大概是这样的:
result = {}
for oneItem in query.fetch():
# oneItem is Entity iterable as shown above
for oneProp in oneItem:
result[oneProp] = oneItem[oneProp]
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")
您需要添加一个索引才能使上述查询正常工作。似乎您没有使用app engine,因此您可能必须通过web控制台添加索引您想在示例中说明什么?for循环不断用下一个实体覆盖result
中的值。您实际上就是这样做的:result=query.fetch()[-1]
ahh是的,在我的例子中,它只会有一个实体,我也不知道如何直接访问它。query.fetch()不支持索引。如果是的话,我就不会发布这个问题了。谢谢。它在当地起了作用。但事实证明,GAE只支持标准env中的ndb,这在两者中似乎更好。