Python 中 datetime.datetime 对象的正确 None 或 null 条目是啥?

Posted

技术标签:

【中文标题】Python 中 datetime.datetime 对象的正确 None 或 null 条目是啥?【英文标题】:What's the correct None or null entry for a datetime.datetime object in Python?Python 中 datetime.datetime 对象的正确 None 或 null 条目是什么? 【发布时间】:2013-12-04 21:55:45 【问题描述】:

我正在使用 pymongo 将一些日期加载到 mongodb 中。因为 pymongo 会自动转换为 BSON,所以我正在使用 datetime 的 datetime.strptime 函数将输入字符串(如“12/04/2013”​​)转换为 Date 对象,如下所示:

>>> datetime.datetime.strptime("12/04/2013",'%m/%d/%Y')
datetime.datetime(2013, 12, 4, 0, 0)

这样它们就可以使用标准的 mongo 查询进行搜索。

我的问题是:我还想以等同于None 的方式表示我不知道某事物的日期,以便我可以对其进行None 空测试。我意识到我可以用 try-catch 块输入''None 将这个日期放在很远的过去或将来,但这是hacky 的想法,我宁愿使用适当的None 类型来表示实际上是 None。

如何输入无日期时间?

【问题讨论】:

为什么不直接使用None 而不是假设的“None-ish”日期时间对象? 好吧,我对 mongodb 建模有点陌生,但我认为我的 BSON 集合中的类型会不一致——有些是 Date() 对象,有些是 None。我宁愿它们都是 Date() 类型,一些具有 None 值,另一些具有日期值。不确定,也许这实际上是这样做的? None 是一个单身人士。正是出于这个原因,它有自己的类型 (NoneType) - 提供通用的“值不存在”,而不是“值为空”。并且“不存在”与类型无关。我对 MongoDB 一无所知,所以这实际上可能是一个问题(我的问题很严重)。 是的,我不完全确定自己,刚开始使用 mongo 进行日期查询。我希望你是对的,但想通过互联网检查。类似零的空集是一个非常棒的发明。 【参考方案1】:

当你搜索 MongoDB null 时,缺失值是等价的。

> db.foo.insert(a: null)
> db.foo.insert()
db.foo.find(a: null, _id: 0)
 "a" : null 
  

pymongo 的工作方式相同:

>>> [doc for doc in pymongo.MongoClient().test.foo.find('a': None, '_id': 0)]
[u'a': None, ]

所以None 似乎是一个不错的选择。它与 Python 语义一致,它与 dict.get 方法的默认行为表现得很好,并且在使用 Python 驱动程序时可以直观地映射到 MongoDB 类型。

【讨论】:

【参考方案2】:

MongoDB 是一个 NoSQL 数据库,这意味着您可以制作有趣的数据模型。

http://docs.mongodb.org/manual/core/data-modeling-introduction/

您的集合中的每个文档不需要具有相同的一组字段名称。如果您不知道日期,您可以直接将其省略。当您想要检索文档时,您的应用程序代码可以轻松检查时间戳是否存在

import pymongo
import datetime

mclient = pymongo.MongoClient()
mclient.test.example.insert('Name': "Orange")
mclient.test.example.insert('Name': "Lemon", 'timestamp':datetime.datetime.now())
for document in mclient.test.example.find():
    if "timestamp" in document:
        print document

【讨论】:

以上是关于Python 中 datetime.datetime 对象的正确 None 或 null 条目是啥?的主要内容,如果未能解决你的问题,请参考以下文章

django之Template(模板)

常用模块(datatime)

熊猫时间戳与日期时间的性能缓慢

超详细Python秒杀代码京东淘宝抢购通用

使用 Python 的时间戳更新 Googlesheet 单元格

熊猫日期时间和日期时间日期时间之间的区别