Skip to content

Commit acd69df

Browse files
authored
Handle logging queries encoded as bytes under PostgreSQL (#1812)
1 parent 43c076a commit acd69df

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

debug_toolbar/panels/sql/tracking.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,10 @@ def _record(self, method, sql, params):
180180
# Sql might be an object (such as psycopg Composed).
181181
# For logging purposes, make sure it's str.
182182
if vendor == "postgresql" and not isinstance(sql, str):
183-
sql = sql.as_string(conn)
183+
if isinstance(sql, bytes):
184+
sql = sql.decode("utf-8")
185+
else:
186+
sql = sql.as_string(conn)
184187
else:
185188
sql = str(sql)
186189

docs/changes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Pending
1313
it collects the used static files in a ``ContextVar``.
1414
* Added check ``debug_toolbar.W007`` to warn when JavaScript files are
1515
resolving to the wrong content type.
16+
* Fixed SQL statement recording under PostgreSQL for queries encoded as byte
17+
strings.
1618

1719
4.1.0 (2023-05-15)
1820
------------------

tests/panels/test_sql.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,17 @@ def test_non_ascii_query(self):
158158
# ensure the panel renders correctly
159159
self.assertIn("café", self.panel.content)
160160

161+
@unittest.skipUnless(
162+
connection.vendor == "postgresql", "Test valid only on PostgreSQL"
163+
)
164+
def test_bytes_query(self):
165+
self.assertEqual(len(self.panel._queries), 0)
166+
167+
with connection.cursor() as cursor:
168+
cursor.execute(b"SELECT 1")
169+
170+
self.assertEqual(len(self.panel._queries), 1)
171+
161172
def test_param_conversion(self):
162173
self.assertEqual(len(self.panel._queries), 0)
163174

0 commit comments

Comments
 (0)