Google Firestore查询昨日数据报错及结果不符问题求助
Firestore查询昨日数据的问题解决
核心问题及修正
1. 查询结果不符合预期的原因
你原代码里犯了一个低级错误:把字符串'start0'传给了where条件,而不是实际的时间变量。这导致查询条件完全无效,自然会返回所有记录。另外时间范围的计算可以更简洁准确。
2. 消除警告的方法
SDK提示的警告是因为你用了旧版的位置参数调用where,现在官方推荐使用filter关键字参数配合FieldFilter类来构建查询条件。
修正后的完整代码
from datetime import datetime, timedelta import pytz from google.cloud.firestore import FieldFilter # 计算昨日UTC时区的起始和结束时间 yesterday = datetime.utcnow().date() - timedelta(days=1) # 昨日UTC零点时刻(带时区信息,和Firestore的datetime字段匹配) start_time = pytz.utc.localize(datetime(yesterday.year, yesterday.month, yesterday.day)) # 今日UTC零点,作为昨日数据的结束边界(用<而非<=,避免包含今日零点的数据) end_time = start_time + timedelta(days=1) # 构建正确的查询,消除警告 docs_all = db.collection('collection')\ .where(filter=FieldFilter('created', '>=', start_time))\ .where(filter=FieldFilter('created', '<', end_time))\ .stream() for doc in docs_all: print(doc.to_dict())
额外说明
- 如果你的Firestore中
created字段存储的是毫秒级时间戳数字,而非datetime类型,那需要把时间转成对应格式:start_timestamp = int(start_time.timestamp() * 1000) end_timestamp = int(end_time.timestamp() * 1000) docs_all = db.collection('collection')\ .where(filter=FieldFilter('created', '>=', start_timestamp))\ .where(filter=FieldFilter('created', '<', end_timestamp))\ .stream() - 确保
created字段的时间是UTC时区的,否则会出现时间偏移导致查询结果不准。
内容的提问来源于stack exchange,提问作者new-to-snake
相关产品推荐
相关产品推荐

