web-dev-qa-db-fra.com

Créer un ISODate avec pyMongo

J'ai essayé de trouver un moyen de créer un objet ISODate avec un client pyMongo, mais sans succès jusqu'à présent.

J'utilise http://pypi.python.org/pypi/pymongo3 client, qui est le seul logiciel sérieux disponible dans Python 3 pour l'instant, mais le problème ne semble pas provenir de cette version spécifique de pymongo.

Je voudrais savoir si l'un d'entre vous a trouvé une solution pour utiliser ce type d'objet MongoDB à partir d'un client pymongo ... Merci pour votre aide!

28

Vous devez juste stocker une instance de datetime.datetime.

Insertion à partir du shell python:

>>> 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')}

Interroger dans le shell mongo:

> db.test.findOne()
{
    "_id" : ObjectId("4e8b388367d5bd2de0000000"),
    "date" : ISODate("2011-10-04T16:46:59.786Z")
}
55
Bernie Hackett

Pour ceux qui se demandent comment créer ISODate à partir d’horodatage:

ts = time.time()
isodate = datetime.datetime.fromtimestamp(ts, None)

Cela créera un objet datetime sans fuseau horaire. Une fois inséré dans MongoDB, il sera converti en ISODate() approprié.

En outre, je recommande fortement de regarder Python TimeTransitionsImage . Notez que Tuple est ici named Tuple (équivalent à struct en C). Notez également que les champs de tuples ne sont pas les mêmes que ceux des équivalents C, même si la dénomination est identique (par exemple, tm_wday commence par lundi et non par dimanche).

14
johndodo

En fait, cela ne fonctionne pas non plus. Lorsque vous essayez d'utiliser utcfromtimestamp ou fromtimestamp, le programme génère une erreur en indiquant qu'il faut un float. Il suffit d’analyser la chaîne dans un objet date/heure et l’utiliser directement dans Mongodb. filtre 

from_dt = datetime.strptime('2018-04-01','%Y-%m-%d')
#from_dts = datetime.utcfromtimestamp(from_dt)
to_dt = datetime.strptime('2018-04-30','%Y-%m-%d')
#to_dts = datetime.utcfromtimestamp(to_dt)
filterCondition = { 
    "LastLogin" : { "$lte" : to_dt},
    "LastLogin" : { "$gte" : from_dt}
}

Et alors

db[(colName)].find({ "<colName>" : filterCondition }) 

Travaillerait... 

1
Sandip Sinha
result = db.objects.insert_one(
   {"last_modified": datetime.datetime.utcnow()})

Ici, utc signifie "temps universel".

0
user6618005