5
在PostgreSQL docs上BEGIN
:如何将PostgreSQL警告提升为psycopg2中的异常?
发行时开始已经一个事务块里面会招来 警告消息。交易状态不受影响。
如何让psycopg2
在任何此类警告中引发异常?
在PostgreSQL docs上BEGIN
:如何将PostgreSQL警告提升为psycopg2中的异常?
发行时开始已经一个事务块里面会招来 警告消息。交易状态不受影响。
如何让psycopg2
在任何此类警告中引发异常?
我被psycopg2
或Postgres
专家很远,而且,我相信有一个更好的解决方案,以提高警告级别,但在这里是一种适合我的工作 - a custom cursor看起来到connection notices,如果有有些东西 - 它会抛出一个异常。实施本身是教育的目的主要是 - 我相信这需要调整您的使用情况下的工作:
import psycopg2
# this "cursor" class needs to be used as a base for custom cursor classes
from psycopg2.extensions import cursor
class ErrorThrowingCursor(cursor):
def __init__(self, conn, *args, **kwargs):
self.conn = conn
super(ErrorThrowingCursor, self).__init__(*args, **kwargs)
def execute(self, query, vars=None):
result = super(ErrorThrowingCursor, self).execute(query, vars)
for notice in self.conn.notices:
level, message = notice.split(": ")
if level == "WARNING":
raise psycopg2.Warning(message.strip())
return result
用法示例:
conn = psycopg2.connect(user="user", password="secret")
cursor = conn.cursor(conn, cursor_factory=ErrorThrowingCursor)
这将抛出一个异常(一个psycopg2.Warning
的如果在查询执行后发出警告,则键入)。示例:
psycopg2.Warning: there is already a transaction in progress
这看起来很干净。如果'psycopg'支持这样的游标,那么我们会很高兴。 – planetp