Как исправить ошибку, возникающую при первом деплое бота из-за отсутствия таблицы в базе данных, когда пустая БД вызывает ошибку "relation 'Message_ids' does not exist" в результате запуска функции бота?
Для начала работы с миграциями в PostgreSQL с использованием Alembic внутри Docker контейнера, следует выполнить следующие шаги: 1. Убедиться, что у вас есть настроенный Docker контейнер с PostgreSQL. 2. Установить Alembic внутри контейнера, добавив его в файл зависимостей вашего Python проекта. 3. Создать папку для хранения миграций и инициализировать Alembic в этой папке с помощью команды "alembic init migrations". 4. Далее можно создавать миграции с помощью команды "alembic revision --autogenerate -m 'Название миграции'" и применять их к базе данных с помощью команды "alembic upgrade head". Чтобы исправить ошибку, возникающую при первом деплое бота из-за отсутствия таблицы в базе данных, можно выполнить следующие действия: 1. Убедиться, что все необходимые миграции были применены к базе данных с помощью Alembic. 2. Если таблицы все еще отсутствуют, можно попробовать создать их вручную с помощью SQL запросов или использовать Alembic для создания новой миграции, которая добавит нужные таблицы. 3. После того, как таблицы были созданы, следует запустить функцию бота еще раз и убедиться, что ошибки больше не возникают. Это поможет исправить ошибку "relation 'Message_ids' does not exist" и запустить функцию бота успешно на пустой базе данных.
Немного отдохнув пришёл к такому решению:
def morning_routine(): """ Delete old message IDs from the DB. Telegram's policy doesn't allow bots to delete messages that are older than 48 hours. Wake's up a little bit slow, to give the database time to fully load. :return: Nothing """ sleep(5) session = Session(engine) threshold = datetime.now() - timedelta(hours=48) stmt = delete(Message).where( Message.date_added < threshold.strftime('%Y-%m-%d %H:%M:%S') ) try: session.execute(stmt) session.commit() except ProgrammingError: subprocess.run( 'alembic revision --autogenerate -m "Initial migration"', shell=True ) subprocess.run('alembic upgrade head', shell=True) finally: session.close()
Буду рад конструктивной критике!
Немного отдохнув пришёл к такому решению:
def morning_routine(): """ Delete old message IDs from the DB. Telegram's policy doesn't allow bots to delete messages that are older than 48 hours. Wake's up a little bit slow, to give the database time to fully load. :return: Nothing """ sleep(5) session = Session(engine) threshold = datetime.now() - timedelta(hours=48) stmt = delete(Message).where( Message.date_added < threshold.strftime('%Y-%m-%d %H:%M:%S') ) try: session.execute(stmt) session.commit() except ProgrammingError: subprocess.run( 'alembic revision --autogenerate -m "Initial migration"', shell=True ) subprocess.run('alembic upgrade head', shell=True) finally: session.close()
Буду рад конструктивной критике!