无法在Google Cloud Datastore SDK中使用query.Or()及相关函数
解决Google Cloud Datastore中
Query.Or()及IN过滤的报错问题 问题根源
你看到的文档示例用的是Datastore新的查询过滤API,这个API里的Or、And是独立的过滤类,并非Query对象的实例方法,所以直接调用query.Or()会触发AttributeError。同时旧的add_filter方法也不支持新的IN过滤语法,需要用新的过滤类实现。
正确实现方式
1. 导入正确的过滤类
确保从google.cloud.datastore导入所需的过滤类:
from google.cloud import datastore from google.cloud.datastore.query import Or, And, PropertyFilter
2. 重构你的查询代码
不再通过Query实例调用Or,而是创建Or过滤实例后,通过Query.filter()方法绑定到查询上:
datastore_client = datastore.Client() query = datastore_client.query() # 构建Or过滤条件 query_filter = Or( [ PropertyFilter("starred", "=", True), And([ PropertyFilter("done", "=", False), PropertyFilter("priority", "=", 4) ]) ] ) # 将过滤条件绑定到查询 query.filter(query_filter) # 执行查询 results = list(query.fetch())
3. IN过滤的正确写法
同样用PropertyFilter实现IN过滤,注意第三个参数必须是列表类型:
id_list = ["id1", "id2", "id3"] # 构建IN过滤条件 in_filter = PropertyFilter("id", "IN", id_list) query.filter(in_filter)
额外验证
- 确认本地依赖确实是指定版本:执行
pip show google-cloud-datastore查看当前安装版本,确保是>=2.15.1 - 无需更新gcloud SDK,因为代码逻辑只依赖Python客户端库,和SDK版本无关
内容的提问来源于stack exchange,提问作者EltoCode
相关产品推荐
相关产品推荐

