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 条目是啥?的主要内容,如果未能解决你的问题,请参考以下文章