以下代码没有问题。
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)?
答案 0 :(得分:2)
看起来您正试图在数据库中插入太大的文件。
根据pymongo文档,safe
parameter表示:
如果safe为True,则会检查插件是否有错误 如果发生了一次,则失败。安全插入等待响应 来自数据库,而普通插入则没有。
因此,从理论上讲,您应该提出OperationFailure
,但您获得的是MemoryError
,a standard python error,这意味着:
当操作耗尽内存时引发,但情况可能如此 仍然被救出(通过删除一些对象)。相关值是a 指示哪种(内部)操作耗尽内存的字符串。 请注意,由于底层的内存管理架构 (C的malloc()函数),解释器可能并不总是能够 完全从这种情况中恢复;然而,它提出了一个 异常,以便可以打印堆栈回溯,以防丢失 程序是原因。
当你说collection.insert(file_cont)
有效时,也许代码可以工作,但数据库中的插入会无声地失败。您应该检查您尝试在数据库中插入的内容的大小,以及计算机上的可用内存。
答案 1 :(得分:0)
这与安全有什么关系?你的内存不足(比如与愚蠢的Python编程有关)......完全不相关的