Задать вопрос
@Nikita235

Ошибка при работе aiogram с postgresql. Как можно решить этот вопрос?

Недавно задавал такой же вопрос, но так и не получил ответ, почему-то мне кажется, что это из-за формулировки.
Я разрабатываю бота на aiogram. Очевидно, что для создания базы данных лучше подойдет ассихронная СУБД.Поэтому я выбрал оболочку для postgresql - asyncpg.

Вот код для бд, в котором я написал функцию для добавления ton-кошельков пользователей:
import asyncpg

user = '',
password = '',
database = '',
host = 'localhost'


async def add_wallets(wallet):
    conn = await asyncpg.connect(user=user, password=password, database=database, host=host)
    await conn.execute("""INSERT INTO users(wallet) VALUES($1,)""", wallet)
    await conn.close()


Эту функцию я импортировал в свой основной код. Вот код обработчика, который принимает данные от пользователя:
@dp.message_handler(state=AddTon.wallet)
async def add_ton(message: types.Message, state=FSMContext):
    wallet = str('wallet')
    await new_ton.add_wallets(wallet)
    await state.finish()
    await message.answer('Ваш ton кошелёк был добавлен')


Как только пользователь вводит данные, появляется ошибка:
Task exception was never retrieved
future: exception=AttributeError("'Protocol' object has no attribute '_on_error'")>
Traceback (most recent call last):
File "asyncpg\protocol\protocol.pyx", line 951, in asyncpg.protocol.protocol.BaseProtocol.connection_made
File "asyncpg\protocol\coreproto.pyx", line 859, in asyncpg.protocol.protocol.CoreProtocol._connect
TypeError: Expected unicode, got tuple

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
return await asyncio.gather(*tasks)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
return await self.message_handlers.notify(update.message)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
File "C:\Users\User\PycharmProjects\bot_ton\handlers\client.py", line 37, in add_ton
await new_ton.add_wallets(wallet)
File "C:\Users\User\PycharmProjects\bot_ton\data_base\new_ton.py", line 10, in add_wallets
pool = await asyncpg.create_pool(user=user, password=password, database=database, host=host)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\pool.py", line 409, in _async__init__
await self._initialize()
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\pool.py", line 437, in _initialize
await first_ch.connect()
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\pool.py", line 129, in connect
self._con = await self._pool._get_new_connection()
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\pool.py", line 507, in _get_new_connection
con = await connection.connect(
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\connection.py", line 2092, in connect
return await connect_utils._connect(
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\connect_utils.py", line 881, in _connect
return await _connect_addr(
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\connect_utils.py", line 773, in _connect_addr
return await __connect_addr(params, timeout, True, *args)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\connect_utils.py", line 825, in __connect_addr
tr, pr = await compat.wait_for(connector, timeout=timeout)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\compat.py", line 56, in wait_for
return await asyncio.wait_for(fut, timeout)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\asyncio\tasks.py", line 445, in wait_for
return fut.result()
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\asyncpg\connect_utils.py", line 710, in _create_ssl_connection
pg_proto.connection_made(new_tr)
File "asyncpg\protocol\protocol.pyx", line 956, in asyncpg.protocol.protocol.BaseProtocol.connection_made
AttributeError: 'Protocol' object has no attribute '_on_error'


Очень надеюсь на вашу помощь, так как уже достаточно намучался с этой проблемой. За раннее спасибо. Если вам ещё потребуется код, то я его скину.
  • Вопрос задан
  • 341 просмотр
Подписаться 1 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Zerg89
Expected unicode, got tuple
Ожидается юникод, получен кортеж
Попробуй базе локаль поменять на utf8_RU-ru
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы