使用pyMongo创建ISODate

Gui*_*ois 30 mongodb pymongo python-3.x isodate

我一直试图找到一种方法来创建一个与pyMongo客户端相关的ISODate对象,但到目前为止还没有任何成功.

我使用http://pypi.python.org/pypi/pymongo3客户端,这是目前Python 3中唯一可用的严重客户端,但问题似乎不是来自这个特定的pymongo版本.

我想知道你是否有人找到了从pymongo客户端使用这个MongoDB对象类型的解决方案...感谢您的帮助!

Ber*_*ett 56

您只需要存储datetime.datetime的实例.

从python shell插入:

>>> c.test.test.insert({'date': datetime.datetime.utcnow()})
ObjectId('4e8b388367d5bd2de0000000')
>>> c.test.test.find_one()
{u'date': datetime.datetime(2011, 10, 4, 16, 46, 59, 786000), u'_id': ObjectId('4e8b388367d5bd2de0000000')}
Run Code Online (Sandbox Code Playgroud)

查询mongo shell:

> db.test.findOne()
{
    "_id" : ObjectId("4e8b388367d5bd2de0000000"),
    "date" : ISODate("2011-10-04T16:46:59.786Z")
}
Run Code Online (Sandbox Code Playgroud)

  • 此外,ISODate不是BSON类型.这就是在shell中表示BSON Datetime的方式.在PyMongo中,它表示为datetime.datetime的一个实例.http://bsonspec.org/#/specification (3认同)
  • 我的MongoDB <1.7,一旦升级,当我按下datetime.datetime实例时它工作正常. (3认同)

joh*_*odo 14

对于那些想知道如何从时间戳创建ISODate的人:

ts = time.time()
isodate = datetime.datetime.fromtimestamp(ts, None)
Run Code Online (Sandbox Code Playgroud)

这将创建datetime没有时区的对象.当插入MongoDB时,它将被转换为正确的ISODate().

另外,我强烈建议您查看Python TimeTransitionsImage.请注意,tuple这里名为tuple(相当于C中的struct).并且还要注意,元组字段与C对应字段不同,即使命名是相同的(例如,tm_wday以星期一而不是星期日开始).

  • `fromtimestamp()`创建一个天真的日期时间对象,表示服务器本地时区的时间:在大多数情况下,它不是你想要的.你应该使用`datetime.utcfromtimestamp(ts)`代替. (5认同)