From 600416aafc58ac6aaaa4aeb3629518c7c1f788e0 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Sun, 1 Jan 2017 05:59:21 +0100 Subject: Fixed sql stuff in Py3 --- lib/sql.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'lib/sql.py') diff --git a/lib/sql.py b/lib/sql.py index 0bd1e31..21ec9cc 100644 --- a/lib/sql.py +++ b/lib/sql.py @@ -24,7 +24,9 @@ # License for more details. import re +import sys import collections + from psycopg2 import extensions as ext @@ -146,19 +148,23 @@ class Literal(Composible): return "sql.Literal(%r)" % (self._wrapped,) def as_string(self, conn_or_curs): + # is it a connection or cursor? + if isinstance(conn_or_curs, ext.connection): + conn = conn_or_curs + elif isinstance(conn_or_curs, ext.cursor): + conn = conn_or_curs.connection + else: + raise TypeError("conn_or_curs must be a connection or a cursor") + a = ext.adapt(self._wrapped) if hasattr(a, 'prepare'): - # is it a connection or cursor? - if isinstance(conn_or_curs, ext.connection): - conn = conn_or_curs - elif isinstance(conn_or_curs, ext.cursor): - conn = conn_or_curs.connection - else: - raise TypeError("conn_or_curs must be a connection or a cursor") - a.prepare(conn) - return a.getquoted() + rv = a.getquoted() + if sys.version_info[0] >= 3 and isinstance(rv, bytes): + rv = rv.decode(ext.encodings[conn.encoding]) + + return rv def __mul__(self, n): return Composed([self] * n) -- cgit v1.2.1