mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #35021 -- Fixed capturing queries when using client-side parameters binding with psycopg 3+.
This commit is contained in:
parent
177e649396
commit
4426b1a72d
@ -105,6 +105,15 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||
},
|
||||
}
|
||||
)
|
||||
if self.uses_server_side_binding:
|
||||
skips.update(
|
||||
{
|
||||
"The actual query cannot be determined for server side bindings": {
|
||||
"backends.base.test_base.ExecuteWrapperTests."
|
||||
"test_wrapper_debug",
|
||||
}
|
||||
},
|
||||
)
|
||||
return skips
|
||||
|
||||
@cached_property
|
||||
|
@ -296,9 +296,14 @@ class DatabaseOperations(BaseDatabaseOperations):
|
||||
if is_psycopg3:
|
||||
|
||||
def last_executed_query(self, cursor, sql, params):
|
||||
try:
|
||||
return self.compose_sql(sql, params)
|
||||
except errors.DataError:
|
||||
if self.connection.features.uses_server_side_binding:
|
||||
try:
|
||||
return self.compose_sql(sql, params)
|
||||
except errors.DataError:
|
||||
return None
|
||||
else:
|
||||
if cursor._query and cursor._query.query is not None:
|
||||
return cursor._query.query.decode()
|
||||
return None
|
||||
|
||||
else:
|
||||
|
@ -89,6 +89,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||
"db_functions.math.test_round.RoundTests."
|
||||
"test_integer_with_negative_precision",
|
||||
},
|
||||
"The actual query cannot be determined on SQLite": {
|
||||
"backends.base.test_base.ExecuteWrapperTests.test_wrapper_debug",
|
||||
},
|
||||
}
|
||||
if self.connection.is_in_memory_db():
|
||||
skips.update(
|
||||
|
@ -211,6 +211,16 @@ class ExecuteWrapperTests(TestCase):
|
||||
self.assertEqual(connection.execute_wrappers, [])
|
||||
self.assertEqual(connections["other"].execute_wrappers, [])
|
||||
|
||||
def test_wrapper_debug(self):
|
||||
def wrap_with_comment(execute, sql, params, many, context):
|
||||
return execute(f"/* My comment */ {sql}", params, many, context)
|
||||
|
||||
with CaptureQueriesContext(connection) as ctx:
|
||||
with connection.execute_wrapper(wrap_with_comment):
|
||||
list(Person.objects.all())
|
||||
last_query = ctx.captured_queries[-1]["sql"]
|
||||
self.assertTrue(last_query.startswith("/* My comment */"))
|
||||
|
||||
|
||||
class ConnectionHealthChecksTests(SimpleTestCase):
|
||||
databases = {"default"}
|
||||
|
Loading…
Reference in New Issue
Block a user