python bfils.erreurs.InvalidDocument: Ne peut pas encoder objet: datetime.date(2015, 3, 1)
J'ai les fonctions suivantes:
# this is in a module called 'dbw_lib'
def dateTimeOuput(start_days_back, end_days_back):
start_delta = datetime.timedelta(days=start_days_back)
end_delta = datetime.timedelta(days=end_days_back)
start_date = datetime.date.today() - start_delta
end_date = datetime.date.today() - end_delta
return start_date, end_date
def dictByDate(start_days, end_days):
start_date, end_date = dbw_lib.dateTimeOuput(start_days, end_days)
date_string = { "created_at": {"$gte" : start_date, "$lt": end_date } }
user_id_email_dict = dbw_lib.dbwIdToEmailD(user_coll_obj, date_query = date_string) # dict of all user ids and emails
print user_id_email_dict
quit()
quand je lance key_dicts = dictByDate(90, 60)
, j'ai la suite de l'exī:
Traceback (most recent call last):
File "main.py", line 212, in <module>
program.runProgram()
File "main.py", line 61, in runProgram
report.RcreateReport()
File "filepath/report.py", line 86, in RcreateReport
key_dicts = dictByDate(90, 60)
File "filepath/report.py", line 65, in dictByDate
user_id_email_dict = dbw_lib.dbwIdToEmailD(user_coll_obj, date_query = date_string) # dict of all user ids and emails
File "filepath/dbw_lib.py", line 50, in dbwIdToEmailD
for pair in id_email_cursor:
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/cursor.py", line 968, in __next__
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/cursor.py", line 905, in _refresh
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/cursor.py", line 812, in __send_message
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/mongo_client.py", line 732, in _send_message_with_response
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/mongo_client.py", line 743, in _reset_on_error
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/server.py", line 85, in send_message_with_response
File "/Library/Python/2.7/site-packages/pymongo-3.0-py2.7-macosx-10.9-intel.egg/pymongo/message.py", line 107, in get_message
bson.errors.InvalidDocument: Cannot encode object: datetime.date(2015, 3, 1)
OriginalL'auteur dwstein | 2015-05-31
Vous devez vous connecter pour publier un commentaire.
il suffit de remplacer
avec
OriginalL'auteur W.Sun
S'avère que
Citation de la source.
Cette réponse unis que cela peut être fait avec le
datetime.datetime.combine
méthode comme suit:OriginalL'auteur Stunner
datetime.date
ne fait pas partie de la bfils Encodeurs. (Peut-être les auteurs ont oublié ou laissé intentionnellement depuis sa ambigu pour ajouter des informations de temps à date juste comme ça).Mais vous pouvez écrire une fonction pour étendre des types personnalisés dans pymongo
Tout comme la façon dont vous permettrait d'étendre un
JSONEncoder
dansjson
que vous pourriez faire quelque chose de semblable dans pymongo à l'aide d'unSONManipulator
:et puis les ajouter à votre instance DB:
(Je n'ai pas donné le
transform_outgoing
méthode, car ce n'est pas la question, mais vous pouvez le trouver ici: http://api.mongodb.org/python/current/examples/custom_type.html)Modifier: Il y a un problème si la valeur de la clé dans le dict est un type de liste. Pour une raison quelconque, pymongo ne passe pas à la
SONManipulator
. Donc, la liste n'est pas transformé.J'ai mis à jour la classe permettant de gérer aussi (mais je ne l'ai pas fait pour
sets
ettuples
).add_son_manipulator()
méthode est obsolète. PyMongo 3 nouveaux CRUD API ne s'applique pas FILS manipulateursOriginalL'auteur kunl