TypeError:“ MongoEngine”对象不可下标 - python

在烧瓶应用程序中,我使用MongoEngine作为ORM。
我在主python文件中定义了db对象,并试图通过从那里导入它来从不同的类中重用它。

这是我在主py文件中创建db的方法:

db = MongoEngine(app, config={
    'db': "MY_DB",
    'host': "myhost",
    'port': 27017,
    'username': 'user',
    'password': 'password'
})

这是我试图从另一个类(从休息入口点开始使用其实例)执行的操作:

from app.engine import db

class ReportService:
    def __init__(self):
        pass

    @staticmethod
    def download_raw_data(collection_name, _from, _to):
        logger.info('Downloading raw_data from collection: ' + collection_name)

        query = {
            "date": {"$gte": _from, "$lte": _to}
        }

        result = db[collection_name].find(query)

        return result

但是,在调用该入口点时出现此错误:

[2019-02-21 10:52:22 +0000] [12] [ERROR] Error handling request module/download/rawdata
Traceback (most recent call last):
  File "/app/env/lib/python3.6/site-packages/gunicorn/workers/base_async.py", line 56, in handle
    self.handle_request(listener_name, req, client, addr)
  File "/app/env/lib/python3.6/site-packages/gunicorn/workers/base_async.py", line 107, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/app/env/lib/python3.6/site-packages/flask_socketio/__init__.py", line 43, in __call__
    start_response)
  File "/app/env/lib/python3.6/site-packages/engineio/middleware.py", line 67, in __call__
    return self.wsgi_app(environ, start_response)
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/app/env/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/app/env/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/app/env/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/app/env/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/app/controllers/modules.py", line 51, in download_raw_data
    result = reports.download_raw_data(collection_name, start_time, end_time)
  File "/app/service/services.py", line 114, in download_raw_data
    result = db[collection_name].find(query)
TypeError: 'MongoEngine' object is not subscriptable

我究竟做错了什么?我也想了解为什么会发生此错误。

提前致谢

参考方案

Mongoengine(...)返回的不是立即的pymongo数据库实例,如果需要,您必须使用get_db()

me = MongoEngine(app, config={...})
...
db = mongo.get_db()
db[collection_name].find(query)

我同意docs令人困惑,因为它称它为db,这具有误导性...

TypeError:_transform()接受2个位置参数,但给出了3个 - python

我了解了CaesarCipher:In [90]: !cat caesar_cipher.py class CaesarCipher: """Construct Caesar cipher using given integer shift for rotation.""" def __init__…

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

写入日志文件时出现TypeError - python

我使用以下代码设置了一个记录器:logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) handler = logging.FileHandler(filename='application.log', mode='a+') handler…

“ python setup.py egg_info”失败,错误代码为1。如何解决此问题 - python

我该如何解决。我找不到任何带有“ Temp \ pip-install-7utykvpt \ polyglot”的目录C:\Windows\system32>pip install polyglot Collecting polyglot Using cached https://files.pythonhosted.org/packages/e7/9…

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…