#python #postgresql #aiohttp #aiopg
#python #postgresql #aiohttp #aiopg
Вопрос:
Я изучаю aiohttp, используя официальную документацию, и на шаге, где я должен получить подключение к базе данных, код вызывает исключение. У меня есть функция, и я вызываю ее с помощью: app.on_startup.append(функция), как в документации. Код функции приведен ниже:
conf = app['config']['postgres']
engine = await aiopg.sa.create_engine(
database=conf['database'],
user=conf['user'],
password=conf['password'],
host=conf['host'],
port=conf['port'],
minsize=conf['minsize'],
maxsize=conf['maxsize'],
)
app['db'] = engine
Исключение ниже:
Traceback (most recent call last):
File "chapi_poolsmain.py", line 14, in
web.run_app(app)
File "C:codingChapienvlibsite-packagesaiohttpweb.py", line 419, in run_app
loop.run_until_complete(_run_app(app,
File "c:myprogrammpythonlibasynciobase_events.py", line 616, in run_until_complete
return future.result()
File "C:codingChapienvlibsite-packagesaiohttpweb.py", line 305, in _run_app
await runner.setup()
File "C:codingChapienvlibsite-packagesaiohttpweb_runner.py", line 232, in setup
self._server = await self._make_server()
File "C:codingChapienvlibsite-packagesaiohttpweb_runner.py", line 331, in _make_server
await self._app.startup()
File "C:codingChapienvlibsite-packagesaiohttpweb_app.py", line 389, in startup
await self.on_startup.send(self)
File "C:codingChapienvlibsite-packagesaiohttpsignals.py", line 34, in send
await receiver(*args, **kwargs) # type: ignore
File "C:codingChapichapi_poolsdb.py", line 46, in init_pg
engine = await aiopg.sa.create_engine(
File "C:codingChapienvlibsite-packagesaiopgsaengine.py", line 69, in _create_engine
pool = await aiopg.create_pool(
File "C:codingChapienvlibsite-packagesaiopgpool.py", line 155, in from_pool_fill
await self._fill_free_pool(False)
File "C:codingChapienvlibsite-packagesaiopgpool.py", line 193, in _fill_free_pool
conn = await connect(
File "C:codingChapienvlibsite-packagesaiopgconnection.py", line 38, in connect
coro = Connection(
File "C:codingChapienvlibsite-packagesaiopgconnection.py", line 92, in __init__
self._loop.add_reader(self._fileno, self._ready, self._weakref)
File "c:myprogrammpythonlibasyncioevents.py", line 501, in add_reader
raise NotImplementedError
NotImplementedError
Exception ignored in:
Traceback (most recent call last):
File "C:codingChapienvlibsite-packagesaiopgconnection.py", line 512, in __del__
File "C:codingChapienvlibsite-packagesaiopgconnection.py", line 310, in close
File "C:codingChapienvlibsite-packagesaiopgconnection.py", line 285, in _close
File "c:myprogrammpythonlibasyncioevents.py", line 504, in remove_reader
NotImplementedError:
Пожалуйста, помогите мне. Я не знаю, что с этим делать
Ответ №1:
Проблема связана со средой ОС Windows.
Скопировал решение по ссылке ниже: https://github.com/aio-libs/aiopg/issues/678#issuecomment-667908402
Быстрый обходной путь — добавить это в свой код
import sys, asyncio
if sys.version_info >= (3, 8) and sys.platform.lower().startswith("win"):
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())