在pymongo中无法插入安全装置

时间:2011-10-14 18:09:12

标签: mongodb pymongo

以下代码没有问题。

collection.insert(file_cont)

以下代码运行如下问题:

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&gt;如何解决这个问题?

问题2&gt;我应该使用insert(sth,safe = True)还是insert(sth)?

2 个答案:

答案 0 :(得分:2)

看起来您正试图在数据库中插入太大的文件。

根据pymongo文档,safe parameter表示:

  

如果safe为True,则会检查插件是否有错误   如果发生了一次,则失败。安全插入等待响应   来自数据库,而普通插入则没有。

因此,从理论上讲,您应该提出OperationFailure,但您获得的是MemoryErrora standard python error,这意味着:

  

当操作耗尽内存时引发,但情况可能如此   仍然被救出(通过删除一些对象)。相关值是a   指示哪种(内部)操作耗尽内存的字符串。   请注意,由于底层的内存管理架构   (C的malloc()函数),解释器可能并不总是能够   完全从这种情况中恢复;然而,它提出了一个   异常,以便可以打印堆栈回溯,以防丢失   程序是原因。

当你说collection.insert(file_cont)有效时,也许代码可以工作,但数据库中的插入会无声地失败。您应该检查您尝试在数据库中插入的内容的大小,以及计算机上的可用内存。

答案 1 :(得分:0)

这与安全有什么关系?你的内存不足(比如与愚蠢的Python编程有关)......完全不相关的