Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python psycopg2执行select pg_notify无法工作_Python 3.x_Psycopg2_Postgresql 10 - Fatal编程技术网

Python 3.x Python psycopg2执行select pg_notify无法工作

Python 3.x Python psycopg2执行select pg_notify无法工作,python-3.x,psycopg2,postgresql-10,Python 3.x,Psycopg2,Postgresql 10,这是我在StackOverflow的第一个问题,所以如果我做错了什么,请温柔一点 我正在努力从Python脚本执行SELECT pg_notify。似乎根本不起作用 我的NodeJS服务器正在使用pg promise监听“testnotify”频道。我把它放在这里只是为了完整性,因为它正在工作 db.connect({direct: true}) .then(sco => { sco.client.on('notification', data => { co

这是我在StackOverflow的第一个问题,所以如果我做错了什么,请温柔一点

我正在努力从Python脚本执行SELECT pg_notify。似乎根本不起作用

我的NodeJS服务器正在使用pg promise监听“testnotify”频道。我把它放在这里只是为了完整性,因为它正在工作

db.connect({direct: true})
.then(sco => {
    sco.client.on('notification', data => {
        console.log('Received:', data);
    });
    return sco.none('LISTEN $1~', 'testnotify');
})
.catch(error => {
    console.log('Error:', error);
});
我的Python脚本应该在一系列成功的db操作之后发出通知

我是这样做的

conn = psycopg2.connect(conn_string)
cur = conn.cursor()
cur.execute("SELECT pg_notify('%s', '%s');" % ('testnotify', 'blabla'))
query = "SELECT pg_notify('testnotify', 'blabla');"
print(query)
cur.execute(query)
import psycopg2
import psycopg2.extensions
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
还是那样

conn = psycopg2.connect(conn_string)
cur = conn.cursor()
cur.execute("SELECT pg_notify('%s', '%s');" % ('testnotify', 'blabla'))
query = "SELECT pg_notify('testnotify', 'blabla');"
print(query)
cur.execute(query)
import psycopg2
import psycopg2.extensions
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
我用类似的方式尝试了NOTIFY testnotify,'blablabla',但没有任何效果。NodeJS那边什么也没发生。 但当我从Python控制台复制printquery的结果并直接从PostgreSQL执行它时,它就像一个魔咒一样工作。 我不明白我的代码出了什么问题

我在Windows10上使用的是PsycopG22.7.5、PostgreSQL10、Node10LTS和PGPromise

旁注:这不是节点的问题,因为在postgresql的源表中使用触发器引发pg_notify或notify时,或者在db中作为常规sql查询执行通知时,节点工作。它不仅在我试图从python脚本发出通知时起作用

经过两天的努力,我认为这是一件明显而愚蠢的事情,但我看不出来。也许这是不可能的


请帮忙。

哦,天哪。。。我刚找到解决办法。。。甚至有两种方法可以解决这个问题

线索在psycopg文档中。。。很明显吧

使用发送通知

cur.execute("SELECT pg_notify('%s', '%s');" % ('testnotify', 'blabla'))
必须像这样设置自动提交的连接

conn = psycopg2.connect(conn_string)
cur = conn.cursor()
cur.execute("SELECT pg_notify('%s', '%s');" % ('testnotify', 'blabla'))
query = "SELECT pg_notify('testnotify', 'blabla');"
print(query)
cur.execute(query)
import psycopg2
import psycopg2.extensions
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
或者简单地说,如果你不想自动提交,那么

cur.execute("SELECT pg_notify('%s', '%s');" % ('testnotify', 'blabla'))
你必须承诺

conn.commit()
aa现在节点通过python接收来自postgresql的通知