Python PostgreSQL通知多个通道
我想制作一个脚本,侦听来自PostgreSQL的两个不同触发器,并根据触发的触发器运行一个脚本:Python PostgreSQL通知多个通道,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我想制作一个脚本,侦听来自PostgreSQL的两个不同触发器,并根据触发的触发器运行一个脚本:trigger\u 1或trigger\u 2。也许我不知道它的确切名称,但我找不到任何基于此的指南 这是我找到的基本脚本,它适用于我,但它只适用于一个触发器 导入选择 导入psycopg2 导入psycopg2.extensions conn=psycopg2.connect(DSN) 连接设置隔离级别(psycopg2.extensions.isolation级别自动提交) 游标=连接游标() c
trigger\u 1
或trigger\u 2
。也许我不知道它的确切名称,但我找不到任何基于此的指南
这是我找到的基本脚本,它适用于我,但它只适用于一个触发器
导入选择
导入psycopg2
导入psycopg2.extensions
conn=psycopg2.connect(DSN)
连接设置隔离级别(psycopg2.extensions.isolation级别自动提交)
游标=连接游标()
curs.execute(“LISTEN trigger_1;”)
curs.execute(“LISTEN trigger_2;”)
而1:
如果选择。选择([conn],[],[],5)=([],[],[]):
打印“超时”
其他:
康涅狄格州民意测验
康涅狄格州通知:
notify=conn.notifys.pop(0)
(如果触发_1,则运行一些代码)
问题是我想为触发器2运行不同的代码
然后需要检查从conn.notifies
获得的notify
值。它将具有一个channel
属性,其中包含通知的频道名称:
import select
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect('dbname=sandbox user=sandbox password=secret host=localhost port=5432 ')
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
curs = conn.cursor()
curs.execute("LISTEN trigger_1;")
curs.execute("LISTEN trigger_2;")
while 1:
print('loop')
if select.select([conn],[],[],5) == ([],[],[]):
print ('Timeout')
else:
conn.poll()
while conn.notifies:
notify = conn.notifies.pop(0)
if notify.channel == 'trigger_1':
print('do something for trigger_1')
elif notify.channel == 'trigger_2':
print('do something for trigger_2')
您的代码似乎工作正常:我可以通知
trigger_1
或trigger_2
,然后代码会唤醒并处理通知。你有什么问题?谢谢你的回答。问题是我想为trigger_2
运行一个不同的代码,我认为应该有一个简单的解决方案!谢谢