python - 查找两个日期之间的对象 TinyDB

标签 python nosql fastapi tinydb

我正在尝试使用 FastAPI 的 tinydb,但我被日期卡住了,TinyDB 中是否有一个在两个日期之间查找对象的函数,我找不到任何类似 Pymongo 的 $gt 等,我试过类似的东西但是没有成功。

class DateTimeSerializer(Serializer):
    OBJ_CLASS = datetime  # The class this serializer handles

    def encode(self, obj):
        return obj.strftime('%Y-%m-%dT%H:%M:%S')

    def decode(self, s):
        return datetime.strptime(s, '%Y-%m-%dT%H:%M:%S')

serialization = SerializationMiddleware()
serialization.register_serializer(DateTimeSerializer(), 'TinyDate')

db = TinyDB("db.json", storage=serialization)

我从 tinydb-serialization 为它创建了一个中间件,但是当我这样搜索时

@app.get("/search")
async def date_get(date: Optional[str] = None,start_at: Optional[str] = None,
                end_at: Optional[str] = None, query: Query = Depends()):
    if start_at and end_at:
        date_db.search((query.date.strptime("%Y/%m/%d") > datetime.strptime(start_at, "%Y/%m/%d")) & (query.date.strptime("%Y/%m/%d") < datetime.strptime(end_at, "%Y/%m/%d")))

此模式还会抛出另一个异常 tinydb:Empty query was evaluated

快速总结:

  1. 我的数据直接来自抓取(请求)所以我不想重写 9-10 key:value
  2. 我不想将它们存储为datetime 对象 除了使用日期搜索之外会有不同的不同端点,所以我不想返回这样的对象 datetime.datetime( 2010, 1, 1, 12, 0)}

最佳答案

如果您将 TinyDB 中的日期保存为自纪元以来的时间,使用:

import datetime
datetime.datetime(year=2022, month=1, day=15).timestamp() # 1642204800.0

你可以很容易地查询你的日期,因为你只是查询 float

import datetime
from tinydb import TinyDB, Query

db = TinyDB('db.json')

db.insert_multiple([
  {
    'id': 1,
    'date': datetime.datetime( year=2022, month=1, day=5  ).timestamp()
  },
  {
    'id': 2,
    'date': datetime.datetime( year=2022, month=1, day=15 ).timestamp()
  }
])

q = Query()
print(db.search(
  (q.date < datetime.datetime( year=2022, month=1, day=10 ).timestamp())
  &
  (q.date > datetime.datetime( year=2022, month=1, day=4  ).timestamp())
))

# prints: [{'id': 1, 'date': 1641340800.0}]

搜索查询可以缩短为:

datetime.datetime( year=2022, month=1, day=4 ).timestamp() < q.date < datetime.datetime( year=2022, month=1, day=10 ).timestamp()

关于python - 查找两个日期之间的对象 TinyDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63101771/

相关文章:

python - 如何从 POST 请求中获取 fast api 中的查询参数

python - Pandas 中的标签数据

python - 如何从 Ubuntu 19.10 卸载 python 3.7?

mongodb - 为什么叫NoSQL?

database - 如何使用哈希在redis中存储这些数据

pagination - fastapi contrib 有 postgresql 的分页器吗?

javascript - FastAPI 不加载静态文件

python - 没有 SciPy 的 PDF 和 CDF

python - Pandas 在数据帧的每一列的第一个有效索引之前和最后一个有效索引之后放置

c# - .ToList().First() 与 .Single for IQueryable 在 c# 中的优势