TypeError:datetime.datetime()不是JSON可序列化的

时间:2017-05-24 12:31:21

标签: mongodb datetime pymongo isodate

我遇到有关MongoDB中时间戳的问题。

所以情况就是这样:

我在json中读到并为它们添加时间戳:

my_json['insertTime'] = datetime.datetime.now()
mongodb.collection.insert_one(my_json)

将导致DB像:

"insertTime" : ISODate("2017-05-24T12:39:34.844Z")

我从DB读取之后尝试将同一文档写入另一个mongoDB表中,我收到以下错误:

TypeError: datetime.datetime(2017, 5, 24, 12, 39, 46, 671000) is not JSON serializable

我已经阅读了将日期时间转换为字符串值的解决方案,但我希望它与第一个表中的ISODate格式一样。

从表A中获取时间后的时间戳是这样的:

'insertTime': datetime.datetime(2017, 5, 24, 12, 39, 46, 671000)

如何以相同的格式(ISODate)将其插入第二个表?

PS:我将数据加载到表B的方式如下:

tableB.insert_one(json.loads(json.dumps(docFromTableA)))

1 个答案:

答案 0 :(得分:2)

没有必要通过JSON表示来将文档保存到MongoDB。只是做:

tableB.insert_one(docFromTableA)

MongoDB的本机数据格式是而不是 JSON,它是BSON,是一种二进制结构,具有比JSON更多的类型。 PyMongo自动在BSON和Python dicts之间转换MongoDB文档。