Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用MongoEngineSessionInterface存储词典_Python_Mongoengine_Flask Mongoengine - Fatal编程技术网

Python 使用MongoEngineSessionInterface存储词典

Python 使用MongoEngineSessionInterface存储词典,python,mongoengine,flask-mongoengine,Python,Mongoengine,Flask Mongoengine,在一个请求中,我在会话['test']中设置了一个字典: session['test'] = {'test': {'test': {'test':0}}} 下一次迭代,会话从MongoDB读回,但是dict已经成为一个不可变的。试图修改它会引起 ReferenceError: weakly-referenced object no longer exists 我可以强制转换为dict,但它不是递归的 print(type(session['test'])) print(type(sessio

在一个请求中,我在
会话['test']
中设置了一个字典:

session['test'] = {'test': {'test': {'test':0}}}
下一次迭代,会话从MongoDB读回,但是
dict
已经成为一个不可变的
。试图修改它会引起

ReferenceError: weakly-referenced object no longer exists
我可以强制转换为
dict
,但它不是递归的

print(type(session['test']))
print(type(session['test']['test']))
print(type(session['test']['test']['test']))

test = dict(session['test'])
print(type(test))
print(type(test['test']))
print(type(test['test']['test']))
印刷品

<class 'mongoengine.base.datastructures.BaseDict'>
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'dict'>
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'mongoengine.base.datastructures.BaseDict'>

您使用的是什么版本的flask和flask mongoengine?当我使用
app.session\u interface.cls.data={'test':{'test':{'test':{'test':0}}}
时,我会在下一个请求时返回一个
dict
。有关版本,请参阅编辑。我不直接调用app.session\u接口。我按照文档的建议做了:
app.session\u interface=mongoenginessessioninterface(db)
初始化时。然后在代码中,我从Flask导入
session
,并使用
session
,假设在初始化时设置
app.session\u接口
。显然是这样的,因为会话确实存储在MongoDB中。在请求和创建的
BaseDict
实例之间正在进行一些垃圾收集,但由于BaseDict使用
weakref.proxy
,引用仍然存在。然后,当您调用
BaseDict.\uuuuu setitem\uuuu
时,将引发异常。如果你提出问题,这可能是可以解决的。好吧,我想我应该先问一下这里,以防我没有正确使用它。问题是:
Name: Flask
Version: 0.10.1
Location: /usr/lib/python3/dist-packages

Name: flask-mongoengine
Version: 0.7.5
Location: /home/jerome/.virtualenvs/simutheque/lib/python3.4/site-packages