@leonidvoroninthebest

Как сделать, чтоб код обращаясь к postgre в постоянно режиме проверял бы наличие новых элементов в таблице и при их наличии передавал бы их в очередь?

Суть в том, что я написал код, который получает сообщения из postgre разово, мне же нужно, чтобы эта проверка выполнялась раз в некоторое время.
Используется Python и psycopg2.

import psycopg2
import config
import queue_class
import logger_file

queue_to_mqtt = queue_class.Queue_1()


def check_message_to_mqtt():
    try:
        connection = psycopg2.connect(user=config.config['POSTGRE']['user'],
                                      password=config.config['POSTGRE']['password'],
                                      host=config.config['POSTGRE']['host'],
                                      port=config.config['POSTGRE']['port'],
                                      database=config.config['POSTGRE']['database'])
        cursor = connection.cursor()
        postgreSQL_select_Query = "SELECT topic, payload " \
                                  "FROM lpwan.tomqtt;"

        cursor.execute(postgreSQL_select_Query)
        print("Selecting rows from mobile table using cursor.fetchall")
        records = cursor.fetchall()

        print("Print each row and it's columns values")

        for row in records:
            topic = row[0]
            payload = row[1]
            summary = (topic, payload)
            queue_to_mqtt.push(summary)


    except (Exception, psycopg2.Error) as error:
        print("Error while fetching data from PostgreSQL", error)
        logger_file.logging.error("Ошибка при чтении с PostgreSQL", error, exc_info=True)
        check_message_to_mqtt()
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Можно запускать этот скрипт по крону, как посоветовали выше, можно делать извлечение записей из БД в цикле.
Если у вас целочисленный идентфикатор у записей, то запоминаете максимальный полученный идентификатор записи ив следующий раз селектите все записи, что больше этого идентификатора. Тогда не придётся важды извлекать из БД одни и те же записи, а если заисей нет, то выборка будет по индексу и произойдёт очень быстро с пустым или небольшим результатом.
Если целочисленного идентификатора нет, то можно завести автоинкрементальное поле или таймштамп, по котоому будете фильтровать уже обработанные записи.
В чем конкретно у вас проблема? Если вы написали выше риведенный код, но не догадались и не сделали попутку засунуть его в цикл, то, сомневаюсь, что это написали вы.
Здесь вам не напишут готового кода, за ним нужно идти к фрилансерам. Задавайте конкретные вопросы и вам помогут.
На общие вопросы - общие ответы, и то если не слишком рстранный вопрос. Никто лекцию тут читать по азам и основам не нанимался.
Детализируйте ворос и как следует оформляйте код, пожалуйста.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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