我正在编写一个程序,以python将数据从MySQL传输到MongoDB。但是,我无法将时间数据类型传输到MongoDB: -MySQL端具有示例格式的时间数据字段:'18:59:32.521177'(“小时:分钟:秒:毫秒”) 我想问一下MongoDB中上述字段的对应数据类型是什么?如何使用python进行转换?
答案 0 :(得分:1)
您可以将数据保留为字符串并进行对话:
your_datatime = datetime.strptime(your_str_datatime, "%Y-%m-%dT%H:%M:%SZ")
your_str_datatime = your_datatime.strftime("%Y-%m-%dT%H:%M:%SZ")
答案 1 :(得分:0)
mongodb中没有时间类型,只有日期时间。如果您真的只使用时间并且根本不关心日期部分,建议您将日期部分设置为1年1月1日(第1年)作为标记。在您的示例中,521177
看起来像是微秒,而不是毫秒,因此它将立即进入python datetime
对象:
# Get your time object from MySQL and extract hour, mins, secs, and microseconds.
# Then, construct a full datetime with the marker date:
d7 = datetime.datetime(1, 1, 1, 18, 59, 32, 521177)
db.foo.insert({"myDate": d7});
db.foo.find();
{ "_id" : ObjectId("5ce45553283c3282ad1cec34"), "myDate" : ISODate("0001-01-01T18:59:32.521Z") }
请注意,MongoDB datetime
的时间部分仅精确到毫秒。如果您需要捕获Micros,则必须将其存储在对等字段中,例如
micros = 521177
d7 = datetime.datetime(1, 1, 1, 18, 59, 32, micros)
db.foo.insert({"myDate": d7, "micros": micros});
或者利用丰富的类型并创建一些日期和微观结构:
micros = 521177
d7 = datetime.datetime(1, 1, 1, 18, 59, 32, micros)
db.foo.insert({"myDate": {"d":d7, "micros": micros}});
这样,您可以轻松携带两个数据:
db.foo.findOne({}, {"myDate":1} );
{
"_id" : ObjectId("5ce457df283c3282c43a79b7"),
"myDate" : {
"micros" : 521177,
"d" : ISODate("0001-01-01T18:59:32.521Z")
}
}
无论如何,您可以直接在从MongoDB获取的日期对象上使用python timedelta
的{{1}}功能。使用1 Jan-1约定,日期差异将始终为零,从而为您带来时间差异-尽管仅精确到毫秒:
datetime