summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorAnders Kaseorg <andersk@mit.edu>2023-04-06 12:44:37 -0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-04-07 08:02:34 +0200
commit73cbb372baa45d1fdafd571e2f430a980831f722 (patch)
tree10d34ca32d823cd6ef09f2727ac359fda6f74d18 /django
parent9daf8b4109c3e133eb57349bb44d73cc60c5773c (diff)
downloaddjango-73cbb372baa45d1fdafd571e2f430a980831f722.tar.gz
Fixed #34466 -- Reallowed setting cursor_factory in DATABASES["options"] on PostgreSQL.
Regression in 09ffc5c1212d4ced58b708cbbf3dfbfb77b782ca.
Diffstat (limited to 'django')
-rw-r--r--django/db/backends/postgresql/base.py17
1 files changed, 8 insertions, 9 deletions
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index 3db3d6abd2..5ed856448f 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -223,7 +223,13 @@ class DatabaseWrapper(BaseDatabaseWrapper):
conn_params.pop("assume_role", None)
conn_params.pop("isolation_level", None)
- conn_params.pop("server_side_binding", None)
+ server_side_binding = conn_params.pop("server_side_binding", None)
+ conn_params.setdefault(
+ "cursor_factory",
+ ServerBindingCursor
+ if is_psycopg3 and server_side_binding is True
+ else Cursor,
+ )
if settings_dict["USER"]:
conn_params["user"] = settings_dict["USER"]
if settings_dict["PASSWORD"]:
@@ -269,20 +275,13 @@ class DatabaseWrapper(BaseDatabaseWrapper):
connection = self.Database.connect(**conn_params)
if set_isolation_level:
connection.isolation_level = self.isolation_level
- if is_psycopg3:
- connection.cursor_factory = (
- ServerBindingCursor
- if options.get("server_side_binding") is True
- else Cursor
- )
- else:
+ if not is_psycopg3:
# Register dummy loads() to avoid a round trip from psycopg2's
# decode to json.dumps() to json.loads(), when using a custom
# decoder in JSONField.
psycopg2.extras.register_default_jsonb(
conn_or_curs=connection, loads=lambda x: x
)
- connection.cursor_factory = Cursor
return connection
def ensure_timezone(self):