summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/loading.py11
-rw-r--r--lib/sqlalchemy/orm/query.py5
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/loading.py b/lib/sqlalchemy/orm/loading.py
index 4a90caeff..9dcaca0ea 100644
--- a/lib/sqlalchemy/orm/loading.py
+++ b/lib/sqlalchemy/orm/loading.py
@@ -87,11 +87,20 @@ def instances(cursor, context):
with util.safe_reraise():
cursor.close()
+ def _no_unique(entry):
+ raise sa_exc.InvalidRequestError(
+ "Can't use the ORM yield_per feature in conjunction with unique()"
+ )
+
row_metadata = SimpleResultMetaData(
labels,
extra,
_unique_filters=[
- id if ent.use_id_for_hash else None
+ _no_unique
+ if context.yield_per
+ else id
+ if ent.use_id_for_hash
+ else None
for ent in context.compile_state._entities
],
)
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 38f1d26b4..9348d7d48 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -2827,7 +2827,10 @@ class Query(
if result._attributes.get("is_single_entity", False):
result = result.scalars()
- if result._attributes.get("filtered", False):
+ if (
+ result._attributes.get("filtered", False)
+ and not self.load_options._yield_per
+ ):
result = result.unique()
return result