我想序列化一个mongoldb游标。为此,我想使用bson.json_util.dumps。有效的代码示例:
>>> from bson.json_util import dumps
>>> dumps(values)
'[{...}]'
但是,我也想在同一个代码中使用json.dumps。出于这个原因,我想显式调用bson.json_util.dumps:
>>> import bson
>>> bson.json_util.dumps(values)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'json_util'
这会产生错误。我知道我可以通过使用&#34; import as&#34;来解决我的问题,但我认为这不是一个干净的解决方案,我觉得我从根本上忽略了一点。 问题:有人可以向我解释为什么第二个代码段不是一个选项?
我最好的猜测是我有一些冲突的模块(其中一个pymongo中有bson?),所以这是我的pip冻结输出:
$ pip freeze
certifi==2018.1.18
chardet==3.0.4
click==6.7
Flask==0.12.2
idna==2.6
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
pycrypto==2.6.1
pymongo==3.6.1
requests==2.18.4
urllib3==1.22
Werkzeug==0.14.1
答案 0 :(得分:2)
bson
是一个包。导入包不会自动授予您访问其模块的权限;只有那些明确导入到包__init__.py
中的模块才可访问。对于其他所有内容,您需要单独导入模块。
注意,您可以直接导入json_util:
from bson import json_util
json_util.dumps(...)
或者,正如您所提到的,使用as
来对函数进行别名:
from bson.json_util import dumps as bson_dumps
答案 1 :(得分:1)
我不知道如何在没有安装bson的情况下测试它,但我认为以下内容应该有效:
import bson.json_util
bson.json_util.dumps(values)