equal
deleted
inserted
replaced
80 import psycopg2.extensions |
80 import psycopg2.extensions |
81 |
81 |
82 from psycopg2 import DatabaseError, IntegrityError, OperationalError |
82 from psycopg2 import DatabaseError, IntegrityError, OperationalError |
83 |
83 |
84 |
84 |
85 log = logging.getLogger("pgmanager") |
85 log_sql = logging.getLogger("pgmanager_sql") |
|
86 log_notices = logging.getLogger("pgmanager_notices") |
86 |
87 |
87 |
88 |
88 class PgManagerError(Exception): |
89 class PgManagerError(Exception): |
89 |
90 |
90 pass |
91 pass |
113 def execute(self, query, args=None): |
114 def execute(self, query, args=None): |
114 try: |
115 try: |
115 return super(Cursor, self).execute(query, args) |
116 return super(Cursor, self).execute(query, args) |
116 finally: |
117 finally: |
117 if self.query: |
118 if self.query: |
118 log.debug(self.query.decode('utf8')) |
119 log_sql.info(self.query.decode('utf8')) |
119 |
120 |
120 def callproc(self, procname, args=None): |
121 def callproc(self, procname, args=None): |
121 try: |
122 try: |
122 return super(Cursor, self).callproc(procname, args) |
123 return super(Cursor, self).callproc(procname, args) |
123 finally: |
124 finally: |
124 if self.query: |
125 if self.query: |
125 log.debug(self.query.decode('utf8')) |
126 log_sql.info(self.query.decode('utf8')) |
126 |
127 |
127 def row_dict(self, row, lstrip=None): |
128 def row_dict(self, row, lstrip=None): |
128 adjustname = lambda a: a |
129 adjustname = lambda a: a |
129 if lstrip: |
130 if lstrip: |
130 adjustname = lambda a: a.lstrip(lstrip) |
131 adjustname = lambda a: a.lstrip(lstrip) |
304 try: |
305 try: |
305 curs = conn.cursor() |
306 curs = conn.cursor() |
306 yield curs |
307 yield curs |
307 finally: |
308 finally: |
308 curs.close() |
309 curs.close() |
|
310 self.log_notices(conn) |
309 self.put_conn(conn, name) |
311 self.put_conn(conn, name) |
|
312 |
|
313 def log_notices(self, conn): |
|
314 for notice in conn.notices: |
|
315 log_notices.info(notice.rstrip()) |
|
316 conn.notices[:] = [] |
310 |
317 |
311 def wait_for_notify(self, name='default', timeout=5): |
318 def wait_for_notify(self, name='default', timeout=5): |
312 '''Wait for asynchronous notifies, return the last one. |
319 '''Wait for asynchronous notifies, return the last one. |
313 |
320 |
314 Returns None on timeout. |
321 Returns None on timeout. |