【问题标题】:insert current time into mongo using pymongo使用 pymongo 将当前时间插入 mongo
【发布时间】:2018-08-15 22:48:13
【问题描述】:

当创建新文档时,我正在尝试以特定格式存储当前时间。 以下是调用无效方法的部分代码:

    dbm = AccountsDB()
    dbm.store_info(user_info)

这里是实际的 AccountsDB() 类:

#! /usr/bin/env python2.7

import pymongo
import datetime
import time

class AccountsDB():
    def store_info(self, user_info=None):
        try:
            conn = pymongo.Connection('localhost', 27017)
            db_name = 'accountsdb'
            coll_name = 'user_info'

            db = conn[db_name]
            coll = db[coll_name]
            print "Successfully connected to '%s'" % db_name

            now = datetime.datetime.now()
            if user_info is not None:
                now = datetime.datetime.now()
                ''' 
                This is not Working...

                created_time = {
                    'created_time': {
                        'day': now.day,
                        'month': now.month,
                        'year': now.year,
                        'hour': now.hour,
                        'minute': now.minute,
                        'second': now.second,
                        'microsecond': now.microsecond
                    }
                }
                user_info.append(created_time)
                '''
                print user_info
                coll.insert(user_info)
            else:
                print 'No user_info'
            print "Data where stored in database"
        except:
            print "Some Error Occured"

我希望文档看起来像这样:

> db.user_info.find().pretty()
{
    "_id" : ObjectId("50d8ded1bdbff3401c252f1a"),
    "ip" : "24.xx.xx.xx",
    "region_code" : "MA",
    "region_name" : "Massachusetts",
    "secret_answer2" : "Mercedes",
    "l_name" : "Flores",
    "f_name" : "Jacob",
    "country_name" : "United States",
        // I want to add next objects to the document
        'created_time': {
            'day': 10,
            'month': 11,
            'year': 12,
            'hour': 11,
            'minute': 11,
            'second': 22,
            'microsecond': 1234
    }
}

【问题讨论】:

  • 您能否提供更多信息,说明此代码为何不工作或它不工作的原因?我刚刚尝试了一些非常相似的测试,并且文档(以及您想要的格式的日期时间)被完美地插入。

标签: python mongodb pymongo


【解决方案1】:

看起来您希望 python 代码在 pymongo 调用中将当前时间传递给 mongo。你这个:

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2012, 12, 24, 18, 33, 46, 266943)

完整的代码如下所示:

import pymongo
from datetime import datetime

class AccountsDB():
    def __init__(self):
        pass
    def store_info(self, user_info=None):
        try:
            conn = pymongo.Connection('localhost', 27017)
            db_name = 'accountsdb'
            coll_name = 'user_info'
            db = conn[db_name]
            coll = db[coll_name]
            print "Successfully connected to '%s'" % db_name
            if user_info is not None:
                user_info['created_time'] = datetime.now()
                print user_info
                coll.insert(user_info)
            else:
                print 'No user_info'
            print "Data where stored in database"
        except:
            print "Some Error Occured"

a = AccountsDB()
a.store_info({})

【讨论】:

  • 有没有办法利用mongod的当前时间思想,让你不用担心不同系统上运行的多个mongo客户端的时钟同步问题?
  • @rakslice:我不确定这将如何工作。您必须为字典项分配一个 python 数据类型,但您必须在 mongodb 的上下文中执行它。
  • 使用 utcnow() 而不是 now() 很重要,否则您最终会插入当地时间,如 kommradHomer 的回答中所述。
【解决方案2】:

pymongo 建议您只需使用 datetime.datetime.utcnow()

例如,下面的代码存储了当前的 UTC 日期和时间 进入 MongoDB:

>>> result = db.objects.insert_one( ... {"last_modified": datetime.datetime.utcnow()})

始终使用 datetime.datetime.utcnow(),它以 UTC 格式返回当前时间,而不是 datetime.datetime.now(),它返回当前本地时间。避免 这样做:

>>> result = db.objects.insert_one( ... {"last_modified": datetime.datetime.now()})

pymongo datetimes

【讨论】:

猜你喜欢
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
相关资源
最近更新 更多