Торнадо + двигатель, в соответствии с примером документа двигателя, даже ошибка - PullRequest
1 голос
/ 20 апреля 2019

Я использовал моторную библиотеку для запроса mongodb в проекте торнадо.По примеру официального документа мне выдали ошибку.Кто может помочь мне с кодом, большое спасибо.

from tornado.ioloop import IOLoop
import motor


async def do_insert():
    db = motor.motor_tornado.MotorClient('mongodb://localhost:27017')
    document = {'key': 'value'}
    result = await db.books.insert_one(document)
    print(result)


if __name__ == "__main__":
    IOLoop.instance().run_sync(do_insert)

, когда я запускаю код, произошли исключения:

Traceback (most recent call last):
  File "/Users/msean/python_project/amazon-riskhelper/test/test_db.py", line 13, in <module>
      IOLoop.instance().run_sync(do_insert)
  File "/Users/msean/.virtualenvs/amazon- 
  riskhelper/lib/python3.7/site-packages/tornado/ioloop.py", line 532, in run_sync
      return future_cell[0].result()
  File "/Users/msean/python_project/amazon-riskhelper/test/test_db.py", line 8, in do_insert
      result = await db.books.insert_one(document)
  File "/Users/msean/.virtualenvs/amazon-riskhelper/lib/python3.7/site-packages/motor/core.py", line 554, in __call__
self.delegate.name)
  TypeError: MotorCollection object is not callable. If you meant to call the 'insert_one' method on a MotorCollection object it is failing because no such method exists.

версия Python: 3.7
версия торнадо:6.0.2
двигатель: 2.0.0

1 Ответ

0 голосов
/ 20 апреля 2019

MotorClient дает вам объект клиента, а не объект базы данных. Вот как должен выглядеть ваш код:

client = motor.motor_tornado.MotorClient('mongodb://localhost:27017')

db = client.db_name # replace `db_name` with actual name of the db

...

result = await db.books.insert_one(...)
...