2011-10-04 21 views
23

PyMongo istemcisiyle birlikte bir ISODate nesnesi oluşturmanın bir yolunu bulmaya çalışıyorum, ancak şimdiye kadar hiç bir başarı elde etmeden.pyMongo ile bir ISODat oluşturma

Şimdi Python 3'te kullanılabilen tek ciddi olan http://pypi.python.org/pypi/pymongo3 istemcisini kullanıyorum, ancak sorun bu belirli pymongo sürümünden gelmiyor gibi görünüyor.

Herhangi biriniz, bu MongoDB nesne tipini bir pymongo istemcisinden kullanmak için bir çözüm bulmuş olup olmadığını bilmek isterim ... yardımınız için teşekkürler!

+0

"now" dışında bir tarihi dönüştürmeniz gerekiyorsa, zaman dilimi bilgisini datetime tarihine eklemek isteyebilirsiniz, utt değeri – kommradHomer

cevap

51

Sadece datetime.datetime örneğini kaydetmeniz gerekir.

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

Mongo kabuk Querying:

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

alınıyor Bu işe yaramazsa, saklanan veri bir dizedir. "timestamp": "Çar Eki 05 2011 09:56:02 GMT + 0200 (CET)", –

+0

MongoDB hangi versiyonunu kullanıyorsunuz? –

+3

Ayrıca, ISODate bir BSON türü değil. Bu, BSON Datetime'nın kabukta temsil edildiği yoldur. PyMongo'da datetime.datetime örneğidir. http://bsonspec.org/#/specification –

13

olanlar için zaman damgası gelen ISODate nasıl oluşturulacağını merak:

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

Bu piton kabuğundan takma

hiçbir zaman dilimi olmadan datetime nesne oluşturacak. MongoDB'ye eklendiğinde uygun ISODate()'a dönüştürülecektir.

Ayrıca, Python TimeTransitionsImage numaralı telefonu incelemenizi öneririm. tuple'un tuple isimli (C'deki yapıya eşdeğer) olduğunu unutmayın. Ayrıca, isimlendirme aynı olsa da (örneğin, tm_wday Pazartesi ile başlayıp Pazar günü değil), tuple alanlarının C muadillerindekiyle aynı olmadığını unutmayın.

+4

'fromtimestamp()' sunucunuzun yerel saat diliminde zamanı temsil eden bir naif datetime nesnesi oluşturun: çoğu durumda istediğiniz gibi değil. Bunun yerine 'datetime.utcfromtimestamp (ts)' yi kullanmalısınız. – jfs

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

Burada, utc Evrensel Zaman Koordinatları anlamına gelir.

+1

Yığın Taşması'na Hoş Geldiniz. Kodun ne yaptığına dair bir açıklama ekleyerek bunu daha iyi bir cevap haline getirebilirsiniz. –