通过psycopg2获取警告消息
问题描述:
我想通过psycopg2调用plpgsql函数并查看警告消息。 即,我有这样的功能:通过psycopg2获取警告消息
create or replace function test_warning() returns void as $$
begin
raise warning 'this is only a test';
end;
$$
language plpgsql;
,并在Python调用它这样:
import psycopg2
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
cursor.callproc("test_warning")
# or so:
cursor.execute('SELECT test_warning()')
不幸的是在PLPGSQL定义的警告消息,任何地方都不会在Python输出显示。 有没有办法让python输出中显示警告信息?
答
的connection
的notices
件发送到客户端到这一点会话的消息的列表:
for notice in conn.notices:
print notice
http://initd.org/psycopg/docs/connection.html#connection.notices
得到最后通知:
print conn.notices[-1]
如果函数内发生异常,但未捕获,则不会收到警告。这是因为函数包装隐式事务,并且该事务内的所有内容都会回滚,包括警告。
非常感谢,这个作品。但是如果我为许多游标使用相同的连接呢?我尝试重置通知:'conn.notices = {}'但我得到了TypeError:readonly属性的异常。 我可以在执行该功能时得到警告吗?比方说,该函数会引发一个警告,然后是一个异常:我希望在引发异常之前看到警告。 – 2014-12-02 07:51:21
@Tomm更新中...... – 2014-12-02 11:33:51
@Tomm您可以使用'del conn.notices [:]'清除通知。在同步模式下执行时,您无法获得通知。也许在异步模式是的,但我从来没有尝试过。 – piro 2014-12-05 12:34:15