не в состоянии вставить с включенным сейфом в pymongo - PullRequest
1 голос
/ 14 октября 2011

Следующий код запускает без проблем.

collection.insert(file_cont)

Следующий код запускает w проблем следующим образом:

collection.insert(file_cont, safe=True)


Traceback (most recent call last):
  File "/home/user/Documents/Python/Python_MongoDB/connect_db.py", line 102, in <module>
    patterns="*.[zZ][iI][pP]")
  File "/home/user/Documents/Python/Python_MongoDB/connect_db.py", line 93, in fs_load_data_to_db
    collection.insert(file_cont, safe=True)
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.0.1-py2.7-linux-i686.egg/pymongo/collection.py", line 283, in insert
    check_keys, safe, kwargs), safe)
  File "/usr/local/lib/python2.7/dist-packages/pymongo-2.0.1-py2.7-linux-i686.egg/pymongo/message.py", line 75, in insert
    data += "".join(encoded)
MemoryError

Вопрос 1> Как решить эту проблему?

Вопрос 2> я должен использовать insert (sth, safe = True) или insert (sth)?

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

Похоже, вы пытаетесь вставить слишком большой файл в вашу базу данных.

Согласно документации pymongo, параметр safe означает:

Если для параметра «Безопасный» задано значение «Истина», то вставка будет проверена на наличие ошибок, что приведет к появлению OperationFailure, если она возникла.Безопасные вставки ждут ответа от базы данных, в то время как обычные вставки - нет.

Итак, теоретически вы должны ожидать, что OperationFailure будет повышено, но вы получите MemoryError, стандартная ошибка Python , что означает:

Возникает, когда операции не хватает памяти, но ситуация все еще может быть спасена (путем удаления некоторых объектов).Соответствующее значение представляет собой строку, указывающую, какой (внутренней) операции не хватило памяти.Обратите внимание, что из-за базовой архитектуры управления памятью (функция malloc () C) интерпретатор не всегда может полностью восстановиться в этой ситуации;тем не менее, возникает исключение, чтобы можно было напечатать трассировку стека, если причиной была запущенная программа.

Когда вы сказали, что collection.insert(file_cont) работает, возможно, код работает, новставка в базу данных молча не удается.Вы должны проверить размер того, что вы пытаетесь вставить в свою базу данных, и доступную память, которую вы имеете на своем компьютере.

0 голосов
/ 14 октября 2011

Какое это имеет отношение к сейфу? Вам не хватает памяти (как, например, из-за глупого программирования на Python) ... совершенно не связано

...