У меня есть простая база данных postgres, вот пример таблицы
как я могу сделать это, когда что-то меняется в нем, это запускает функцию в моем скрипте?
В Postgres есть процедуры notify
и listen
, о которых вы можете прочитать здесь: уведомлять и слушать . Их использование в Python лучше всего (и я считаю, только) через pyscopg2
pip install psycopg2
import select
import psycopg2
import psycopg2.extensions
cnct = psycopg2.connect(DSN)
cnct.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
cursor = cnct.cursor()
cursor.execute("LISTEN channel;")
print("Pending notification from 'channel'...")
while True:
if select.select([cnct],[],[],5) == ([],[],[]):
print("Channel timed out.")
else:
cnct.poll()
while cnct.notifies:
notif = cnct.notifies.pop(0)
print("Received NOTIFY:", notif.pid, notif.channel, notif.payload)
Забыл упомянуть!: Эта информация была взята из того, с чем я ознакомился в Документации по Psycopg2, и вам, возможно, потребуется более подробно ознакомиться с использованием Pyscopg2 там.
Спасибо большое за ответ, ценю. Я на самом деле использую asyncpg, так как я больше асинхронный парень, я думаю, что эквивалентом этих функций является asyncpg.add_listener, я не уверен, хотя
Ах, может быть, я тоже должен был догадаться об этом; и вам очень рады! Вроде механизм похожий, да.
Стандартный подход заключается в периодической проверке базы данных на наличие изменений (возможно, путем добавления столбца
last_modified
в вашу таблицу и выборки строк, которые были изменены с момента последней проверки). Postgres поддерживает вызов функций PG_SQL при изменении таблиц, но я не знаю, как заставить их запускать код Python.