Opened 3 years ago
Last modified 3 years ago
#33435 closed Cleanup/optimization
Since django 3.0 Subquery.as_sql() generates invalid SQL — at Version 1
Reported by: | M1ha Shvn | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | subquery, as_sql |
Cc: | Simon Charette | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
Since this commit Subquery.as_sql(...)
method returns incorrect SQL removing first and last symbols instead of absent breakets. Adding Subquery().query.subquery = True
attribute fixes the problem. From my point of view, it should be set in Subquery
constructor.
from django.db import connection from apps.models import App q = Subquery(App.objects.all()) print(str(q.query)) # Output SQL is valid: # 'SELECT "apps_app"."id", "apps_app"."name" FROM "apps_app"' print(q.as_sql(q.query.get_compiler('default'), connection)) # Outptut SQL is invalid (no S letter at the beggining and " symbol at the end): # ('(ELECT "apps_app"."id", "apps_app"."name" FROM "apps_app)', ()) q.query.subquery = True print(q.as_sql(q.query.get_compiler('default'), connection)) # Outputs correct result ('(SELECT "apps_app"."id", "apps_app"."name" FROM "apps_app")', ())
Note:
See TracTickets
for help on using tickets.