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!
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")
}
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).
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...
result = db.objects.insert_one(
{"last_modified": datetime.datetime.utcnow()})
Ici, utc signifie "temps universel".