Python 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

我想制作一个脚本,侦听来自PostgreSQL的两个不同触发器,并根据触发的触发器运行一个脚本:
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
运行一个不同的代码,我认为应该有一个简单的解决方案!谢谢