Как подключить postgres к телеграмм боту через tortoise-orm?
Всем привет, не могу подключить 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 перед запуском бота
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] Удаленный компьютер отклонил это сетевое подключение
вот ошибка
Если да, то база xenia_links_bot создана?
Как проверить, что постгрес запущен, открой диспетчер задач и посмотри, есть ли он в запущенных процессах
Сейчас протестил, все работает
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для подключения PostgreSQL к телеграмм боту через Tortoise-ORM вам потребуется выполнить несколько шагов.
1. Установите необходимые библиотеки:
Установите библиотеку Tortoise-ORM, а также asyncpg для работы с PostgreSQL. Вы можете установить их с помощью pip:
pip install tortoise-orm asyncpgpip 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' } } }
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"
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())
5. Используйте Tortoise-ORM в своем телеграмм боте:
Теперь вы можете использовать модели данных и запросы к базе данных в своем телеграмм боте. Например, вы можете получить всех пользователей из базы данных и отправить им сообщение:
from models import User async def send_message_to_all_users(message): users = await User.all() for user in users: # Отправить сообщение пользователю pass
Следуя этим шагам, вы сможете успешно подключить PostgreSQL к вашему телеграмм боту через Tortoise-ORM. Не забудьте заменить настройки подключения к базе данных на свои собственные.