Created
April 16, 2020 01:25
-
-
Save airstrike/e6ac4feb96136b71dda5e3fcfa32418e to your computer and use it in GitHub Desktop.
Traceback for subquery-join error upon evaluating the same Subquery twice in a row
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
C:\projects\fundraiser fundraiser λ python manage.py shell | |
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32 | |
Type "help", "copyright", "credits" or "license" for more information. | |
(InteractiveConsole) | |
>>> from fundraising.models import * | |
>>> from django.db.models.sql.constants import LOUTER | |
>>> from django.db.models import * | |
>>> donations = Donation.objects.values('week').annotate(agg=Sum('amount')).filter(membership__group__id=OuterRef('membership__group_id')) | |
>>> groups = Group.objects.annotate(amounts=Subquery(donations, join=True, join_type=LOUTER)) | |
>>> groups | |
DEBUG django.db.backends utils.py@123 (0.000) | |
SELECT "fundraising_group"."id", | |
"fundraising_group"."name" | |
FROM "fundraising_group" | |
LEFT OUTER JOIN "fundraising_membership" ON ("fundraising_group"."id" = "fundraising_membership"."group_id") | |
LEFT OUTER JOIN | |
(SELECT "fundraising_donation"."week", | |
SUM("fundraising_donation"."amount") AS "agg", | |
"fundraising_membership"."group_id" AS "__col1" | |
FROM "fundraising_donation" | |
INNER JOIN "fundraising_membership" ON ("fundraising_donation"."membership_id" = "fundraising_membership"."id") | |
GROUP BY "fundraising_donation"."week", | |
"fundraising_membership"."group_id") "amounts" ON "amounts"."__col1" = "fundraising_membership"."group_id" | |
LIMIT 21; | |
args=() | |
<QuerySet [<Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>]> | |
>>> groups | |
DEBUG django.db.backends utils.py@123 (0.000) | |
SELECT "fundraising_group"."id", | |
"fundraising_group"."name" | |
FROM "fundraising_group" | |
LEFT OUTER JOIN "fundraising_membership" ON ("fundraising_group"."id" = "fundraising_membership"."group_id") | |
LEFT OUTER JOIN | |
(SELECT "fundraising_donation"."week", | |
SUM("fundraising_donation"."amount") AS "agg", | |
"fundraising_membership"."group_id" AS "__col1" | |
FROM "fundraising_donation" | |
INNER JOIN "fundraising_membership" ON ("fundraising_donation"."membership_id" = "fundraising_membership"."id") | |
GROUP BY "fundraising_donation"."week", | |
"fundraising_membership"."group_id") "amounts" ON "amounts"."__col1" = "fundraising_membership"."group_id" | |
LIMIT 21; | |
args=() | |
<QuerySet [<Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (1)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>, <Group: Group object (2)>]> | |
>>> Group.objects.annotate(amounts=Subquery(donations, join=True, join_type=LOUTER)) | |
DEBUG django.db.backends utils.py@123 (0.000) | |
SELECT "fundraising_group"."id", | |
"fundraising_group"."name" | |
FROM "fundraising_group" | |
LEFT OUTER JOIN | |
(SELECT "fundraising_donation"."week", | |
SUM("fundraising_donation"."amount") AS "agg", | |
"amounts"."__col1" AS "__col1" | |
FROM "fundraising_donation" | |
INNER JOIN "fundraising_membership" ON ("fundraising_donation"."membership_id" = "fundraising_membership"."id") | |
GROUP BY "fundraising_donation"."week", | |
"amounts"."__col1") "amounts" ON "amounts"."__col1" = "fundraising_membership"."group_id" | |
LIMIT 21; | |
args=() | |
Traceback (most recent call last): | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\utils.py", line 84, in _execute | |
return self.cursor.execute(sql, params) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\sqlite3\base.py", line 411, in execute | |
return Database.Cursor.execute(self, query, params) | |
sqlite3.OperationalError: no such column: amounts.__col1 | |
The above exception was the direct cause of the following exception: | |
Traceback (most recent call last): | |
File "<console>", line 1, in <module> | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\models\query.py", line 262, in __repr__ | |
data = list(self[:REPR_OUTPUT_SIZE + 1]) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\models\query.py", line 268, in __len__ | |
self._fetch_all() | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\models\query.py", line 1296, in _fetch_all | |
self._result_cache = list(self._iterable_class(self)) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\models\query.py", line 53, in __iter__ | |
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\models\sql\compiler.py", line 1140, in execute_sql | |
cursor.execute(sql, params) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\utils.py", line 98, in execute | |
return super().execute(sql, params) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\utils.py", line 66, in execute | |
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\utils.py", line 75, in _execute_with_wrappers | |
return executor(sql, params, many, context) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\utils.py", line 84, in _execute | |
return self.cursor.execute(sql, params) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\utils.py", line 90, in __exit__ | |
raise dj_exc_value.with_traceback(traceback) from exc_value | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\utils.py", line 84, in _execute | |
return self.cursor.execute(sql, params) | |
File "C:\virtual\fundraiser\lib\site-packages\django-3.1.dev20200415194915-py3.8.egg\django\db\backends\sqlite3\base.py", line 411, in execute | |
return Database.Cursor.execute(self, query, params) | |
django.db.utils.OperationalError: no such column: amounts.__col1 | |
>>> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment