Skip to content

Commit db24e9b

Browse files
authored
Merge pull request #1157 from hakib/postgresql-psycopg2-composable
Handle SQL commands executed using as psycopg2 Composed object
2 parents d21a13c + 98ebfbe commit db24e9b

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

debug_toolbar/panels/sql/tracking.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ def _record(self, method, sql, params):
135135
conn = self.db.connection
136136
vendor = getattr(conn, "vendor", "unknown")
137137

138+
# Sql might be an object (such as psycopg Composed).
139+
# For logging purposes, make sure it's str.
140+
sql = str(sql)
141+
138142
params = {
139143
"vendor": vendor,
140144
"alias": alias,

tests/panels/test_sql.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,31 @@ def test_erroneous_query(self):
209209
except DatabaseError as e:
210210
self.assertTrue("erroneous query" in str(e))
211211

212+
@unittest.skipUnless(
213+
connection.vendor == "postgresql", "Test valid only on PostgreSQL"
214+
)
215+
def test_execute_with_psycopg2_composed_sql(self):
216+
"""
217+
Test command executed using a Composed psycopg2 object is logged.
218+
Ref: http://initd.org/psycopg/docs/sql.html
219+
"""
220+
from psycopg2 import sql
221+
222+
self.assertEqual(len(self.panel._queries), 0)
223+
224+
with connection.cursor() as cursor:
225+
command = sql.SQL("select {field} from {table}").format(
226+
field=sql.Identifier("username"), table=sql.Identifier("auth_user")
227+
)
228+
cursor.execute(command)
229+
230+
self.assertEqual(len(self.panel._queries), 1)
231+
232+
query = self.panel._queries[0]
233+
self.assertEqual(query[0], "default")
234+
self.assertTrue("sql" in query[1])
235+
self.assertEqual(query[1]["sql"], 'select "username" from "auth_user"')
236+
212237
def test_disable_stacktraces(self):
213238
self.assertEqual(len(self.panel._queries), 0)
214239

0 commit comments

Comments
 (0)