Как подключить postgres к телеграмм боту через tortoise-orm?

Ссылка скопирована
1 ответ

Всем привет, не могу подключить postgres к телеграмм боту через tortoise-orm

Использую asyncpg

Код INIT файла:

from tortoise import Tortoise  db = Tortoise()  async def init():     await Tortoise.init(db_url='postgres://postgres:1111@127.0.0.1:5432/xenia_links_bot', modules={'models': ['db.models']})     await Tortoise.generate_schemas()   async def on_shutdown():     await db.close_connections()

from tortoise import Tortoise db = Tortoise() async def init(): await Tortoise.init(db_url='postgres://postgres:1111@127.0.0.1:5432/xenia_links_bot', modules={'models': ['db.models']}) await Tortoise.generate_schemas() async def on_shutdown(): await db.close_connections()

КОД MODELS:

from tortoise import fields   class CityIds(Model):     id = fields.IntField(pk=True)     id_ = fields.IntField()     iata = fields.CharField(max_length=25)     name_en = fields.CharField(max_length=1024)     name_ru = fields.CharField(max_length=1024)     country_name_en = fields.CharField(max_length=1024)     country_name_ru = fields.CharField(max_length=1024)     parent_id = fields.IntField()     parent_name_en = fields.CharField(max_length=1024)     parent_name_ru = fields.CharField(max_length=1024)

from tortoise import fields class CityIds(Model): id = fields.IntField(pk=True) id_ = fields.IntField() iata = fields.CharField(max_length=25) name_en = fields.CharField(max_length=1024) name_ru = fields.CharField(max_length=1024) country_name_en = fields.CharField(max_length=1024) country_name_ru = fields.CharField(max_length=1024) parent_id = fields.IntField() parent_name_en = fields.CharField(max_length=1024) parent_name_ru = fields.CharField(max_length=1024)

Дополнительно:

А проблема то в чем? Надо вызвать метод init перед запуском бота

  • Wispik,
    INFO:aiogram:Bot: Test Text [@Test_Text_Bot_Test_Text_Bot] WARNING:aiogram:Goodbye! Traceback (most recent call last):   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTapp.py", line 24, in <module>     executor.start_polling(dp, on_startup=on_startup)   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesaiogramutilsexecutor.py", line 45, in start_polling     executor.start_polling(   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesaiogramutilsexecutor.py", line 320, in start_polling     loop.run_until_complete(self._startup_polling())   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 653, in run_until_complete     return future.result()            ^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesaiogramutilsexecutor.py", line 377, in _startup_polling     await callback(self.dispatcher)   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTapp.py", line 16, in on_startup     await init()   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTdbinit.py", line 8, in init     await Tortoise.generate_schemas()   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoise__init__.py", line 640, in generate_schemas     await generate_schema_for_client(connection, safe)   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoiseutils.py", line 31, in generate_schema_for_client     await generator.generate_from_string(schema)   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbaseschema_generator.py", line 448, in generate_from_string     await self.client.execute_script(creation_string)   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbase_postgresclient.py", line 34, in _translate_exceptions     return await self._translate_exceptions(func, *args, **kwargs)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsasyncpgclient.py", line 82, in _translate_exceptions     return await func(self, *args, **kwargs)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbase_postgresclient.py", line 150, in execute_script     async with self.acquire_connection() as connection:   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbaseclient.py", line 326, in __aenter__     await self.ensure_connection()   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbaseclient.py", line 322, in ensure_connection     await self.client.create_connection(with_db=True)   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsasyncpgclient.py", line 59, in create_connection     self._pool = await self.create_pool(password=self.password, **self._template)                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsasyncpgclient.py", line 65, in create_pool     return await asyncpg.create_pool(None, **kwargs)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 403, in _async__init__     await self._initialize()   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 430, in _initialize     await first_ch.connect()   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 128, in connect     self._con = await self._pool._get_new_connection()                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 502, in _get_new_connection     con = await connection.connect(           ^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnection.py", line 2329, in connect     return await connect_utils._connect(            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 1017, in _connect     raise last_error or exceptions.TargetServerAttributeNotMatched(   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 991, in _connect     conn = await _connect_addr(            ^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 828, in _connect_addr     return await __connect_addr(params, True, *args)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 873, in __connect_addr     tr, pr = await connector              ^^^^^^^^^^^^^^^   File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 744, in _create_ssl_connection     tr, pr = await loop.create_connection(              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 1085, in create_connection     raise exceptions[0]   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 1069, in create_connection     sock = await self._connect_sock(            ^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 973, in _connect_sock     await self.sock_connect(sock, address)   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasyncioproactor_events.py", line 726, in sock_connect     return await self._proactor.connect(sock, address)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciowindows_events.py", line 846, in _poll     value = callback(transferred, key, ov)             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciowindows_events.py", line 633, in finish_connect     ov.getresult() ConnectionRefusedError: [WinError 1225] Удаленный компьютер отклонил это сетевое подключение

    INFO:aiogram:Bot: Test Text [@Test_Text_Bot_Test_Text_Bot] WARNING:aiogram:Goodbye! Traceback (most recent call last): File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTapp.py", line 24, in <module> executor.start_polling(dp, on_startup=on_startup) File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesaiogramutilsexecutor.py", line 45, in start_polling executor.start_polling( File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesaiogramutilsexecutor.py", line 320, in start_polling loop.run_until_complete(self._startup_polling()) File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 653, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesaiogramutilsexecutor.py", line 377, in _startup_polling await callback(self.dispatcher) File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTapp.py", line 16, in on_startup await init() File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTdbinit.py", line 8, in init await Tortoise.generate_schemas() File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoise__init__.py", line 640, in generate_schemas await generate_schema_for_client(connection, safe) File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoiseutils.py", line 31, in generate_schema_for_client await generator.generate_from_string(schema) File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbaseschema_generator.py", line 448, in generate_from_string await self.client.execute_script(creation_string) File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbase_postgresclient.py", line 34, in _translate_exceptions return await self._translate_exceptions(func, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsasyncpgclient.py", line 82, in _translate_exceptions return await func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbase_postgresclient.py", line 150, in execute_script async with self.acquire_connection() as connection: File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbaseclient.py", line 326, in __aenter__ await self.ensure_connection() File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsbaseclient.py", line 322, in ensure_connection await self.client.create_connection(with_db=True) File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsasyncpgclient.py", line 59, in create_connection self._pool = await self.create_pool(password=self.password, **self._template) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagestortoisebackendsasyncpgclient.py", line 65, in create_pool return await asyncpg.create_pool(None, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 403, in _async__init__ await self._initialize() File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 430, in _initialize await first_ch.connect() File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 128, in connect self._con = await self._pool._get_new_connection() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgpool.py", line 502, in _get_new_connection con = await connection.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnection.py", line 2329, in connect return await connect_utils._connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 1017, in _connect raise last_error or exceptions.TargetServerAttributeNotMatched( File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 991, in _connect conn = await _connect_addr( ^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 828, in _connect_addr return await __connect_addr(params, True, *args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 873, in __connect_addr tr, pr = await connector ^^^^^^^^^^^^^^^ File "C:UserslyapiDesktopАвито КодыXENIA_LINKS_BOTvenvLibsite-packagesasyncpgconnect_utils.py", line 744, in _create_ssl_connection tr, pr = await loop.create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 1085, in create_connection raise exceptions[0] File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 1069, in create_connection sock = await self._connect_sock( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciobase_events.py", line 973, in _connect_sock await self.sock_connect(sock, address) File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasyncioproactor_events.py", line 726, in sock_connect return await self._proactor.connect(sock, address) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciowindows_events.py", line 846, in _poll value = callback(transferred, key, ov) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UserslyapiAppDataLocalProgramsPythonPython311Libasynciowindows_events.py", line 633, in finish_connect ov.getresult() ConnectionRefusedError: [WinError 1225] Удаленный компьютер отклонил это сетевое подключение

    вот ошибка

  • Неправильная строка подключения db_url, по этой ссылке postgres не отвечает
  • Wispik, я знаю, я не понимаю как это исправить. Вы не знаете?
  • Даниил Ляпин, ну давай с банальных вещей начнем. Postgres то вообще установлена и запущена?
    Если да, то база xenia_links_bot создана?
  • Wispik, в db_url надо вписывать название модели или директиву бд?
  • Wispik, postgres установлена. Как ее запустить?
  • Даниил Ляпин, в db_url надо писать не название модели, а название базы данных. Для теста, можешь попробовать подключиться к баз postgres, она установлена по умолчанию.
    Как проверить, что постгрес запущен, открой диспетчер задач и посмотри, есть ли он в запущенных процессах
  • Wispik, все сделал, подключился к postgres все сработало, ща буду гуглить как создать бд там. Спасибо огромное Вам за помощь!
  • Даниил Ляпин, лучше pgadmin использовать, она устанавливается вместо с postgres и там все наглядно и понятно
  • Wispik, да, я ее и установил, но базу создал в sql shell

    Сейчас протестил, все работает

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Для подключения PostgreSQL к телеграмм боту через Tortoise-ORM вам потребуется выполнить несколько шагов.

    1. Установите необходимые библиотеки:
    Установите библиотеку Tortoise-ORM, а также asyncpg для работы с PostgreSQL. Вы можете установить их с помощью pip:

    pip install tortoise-orm asyncpg

    pip install tortoise-orm asyncpg

    2. Настройте подключение к базе данных:
    Создайте файл config.py и добавьте в него настройки для подключения к базе данных PostgreSQL:

    DB_CONFIG = {
        'connections': {
            'default': 'postgres://username:password@localhost:5432/dbname'
        },
        'apps': {
            'models': {
                'models': ['__main__'],
                'default_connection': 'default'
            }
        }
    }

    DB_CONFIG = { 'connections': { 'default': 'postgres://username:password@localhost:5432/dbname' }, 'apps': { 'models': { 'models': ['__main__'], 'default_connection': 'default' } } }

    3. Определите модели данных:
    Создайте модели данных для вашего приложения. Например, создайте файл models.py и определите модели пользователей:

    from tortoise import fields
    from tortoise.models import Model
     
    class User(Model):
        id = fields.IntField(pk=True)
        username = fields.CharField(max_length=50)
     
        class Meta:
            table = "users"

    from tortoise import fields from tortoise.models import Model class User(Model): id = fields.IntField(pk=True) username = fields.CharField(max_length=50) class Meta: table = "users"

    4. Инициализируйте соединение с базой данных:
    Инициализируйте соединение с базой данных и модели данных в вашем скрипте Python:

    from tortoise import Tortoise, run_async
    from config import DB_CONFIG
    from models import User
     
    async def init():
        await Tortoise.init(config=DB_CONFIG)
        await Tortoise.generate_schemas()
     
    if __name__ == '__main__':
        run_async(init())

    from tortoise import Tortoise, run_async from config import DB_CONFIG from models import User async def init(): await Tortoise.init(config=DB_CONFIG) await Tortoise.generate_schemas() if __name__ == '__main__': run_async(init())

    5. Используйте Tortoise-ORM в своем телеграмм боте:
    Теперь вы можете использовать модели данных и запросы к базе данных в своем телеграмм боте. Например, вы можете получить всех пользователей из базы данных и отправить им сообщение:

    from models import User
     
    async def send_message_to_all_users(message):
        users = await User.all()
        for user in users:
            # Отправить сообщение пользователю
            pass

    from models import User async def send_message_to_all_users(message): users = await User.all() for user in users: # Отправить сообщение пользователю pass

    Следуя этим шагам, вы сможете успешно подключить PostgreSQL к вашему телеграмм боту через Tortoise-ORM. Не забудьте заменить настройки подключения к базе данных на свои собственные.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно