#25811: Error in consultation with models of different database
----------------------------------------------+----------------------
Reporter: ebar0n | Owner: nobody
Type: Bug | Status: new
Component: Database layer (models, ORM) | Version: 1.8
Severity: Normal | Keywords: database
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+----------------------
Model1: Deportes from database1
Model2: Hecho1_VentasCadenasJuegos from database2
Code:
{{{
Deportes.objects.filter(
pk__in=Hecho1_VentasCadenasJuegos.objects.all().values_list(
'juegos__deporte_id', flat=True
).distinct('juegos__deporte_id')
)
}}}
Error:
{{{
Traceback (most recent call last):
File "/usr/local/lib/python3.5/site-
packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation
"admin_datamart_hecho1_ventascadenasjuegos" does not exist
LINE 1: ...ISTINCT ON (U1."deporte_id") U1."deporte_id" FROM "admin_dat...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<console>", line 4, in <module>
File "/usr/local/lib/python3.5/site-packages/django/db/models/query.py",
line 138, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/usr/local/lib/python3.5/site-packages/django/db/models/query.py",
line 162, in __iter__
self._fetch_all()
File "/usr/local/lib/python3.5/site-packages/django/db/models/query.py",
line 965, in _fetch_all
self._result_cache = list(self.iterator())
File "/usr/local/lib/python3.5/site-packages/django/db/models/query.py",
line 238, in iterator
results = compiler.execute_sql()
File "/usr/local/lib/python3.5/site-
packages/django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python3.5/site-
packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/usr/local/lib/python3.5/site-
packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.5/site-packages/django/db/utils.py", line
97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python3.5/site-packages/django/utils/six.py", line
658, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.5/site-
packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation
"admin_datamart_hecho1_ventascadenasjuegos" does not exist
LINE 1: ...ISTINCT ON (U1."deporte_id") U1."deporte_id" FROM "admin_dat...
}}}
Viewing the SQL generated
{{{
SELECT "admin_juego_deportes"."id", "admin_juego_deportes"."nombre",
"admin_juego_deportes"."logo", "admin_juego_deportes"."orden",
"admin_juego_deportes"."orden_equipos",
"admin_juego_deportes"."count_apuesta", "admin_juego_deportes"."fondoweb",
"admin_juego_deportes"."cantidad",
"admin_juego_deportes"."cantidad_tiempos",
"admin_juego_deportes"."runline_positivo",
"admin_juego_deportes"."ganador_empate_not_null",
"admin_juego_deportes"."resultado", "admin_juego_deportes"."created_at",
"admin_juego_deportes"."updated_at" FROM "admin_juego_deportes" WHERE
"admin_juego_deportes"."id" IN (SELECT DISTINCT ON (U1."deporte_id")
U1."deporte_id" FROM "admin_datamart_hecho1_ventascadenasjuegos" U0 INNER
JOIN "admin_datamart_dimensionjuegos" U1 ON ( U0."juegos_id" = U1."id" ))
ORDER BY "admin_juego_deportes"."nombre" ASC
}}}
Solution:
{{{
Deportes.objects.filter(
pk__in=list(Hecho1_VentasCadenasJuegos.objects.all().values_list(
'juegos__deporte_id', flat=True
).distinct('juegos__deporte_id'))
)
}}}
Viewing the SQL generated
{{{
SELECT "admin_juego_deportes"."id", "admin_juego_deportes"."nombre",
"admin_juego_deportes"."logo", "admin_juego_deportes"."orden",
"admin_juego_deportes"."orden_equipos",
"admin_juego_deportes"."count_apuesta", "admin_juego_deportes"."fondoweb",
"admin_juego_deportes"."cantidad",
"admin_juego_deportes"."cantidad_tiempos",
"admin_juego_deportes"."runline_positivo",
"admin_juego_deportes"."ganador_empate_not_null",
"admin_juego_deportes"."resultado", "admin_juego_deportes"."created_at",
"admin_juego_deportes"."updated_at" FROM "admin_juego_deportes" WHERE
"admin_juego_deportes"."id" IN (1, 2) ORDER BY
"admin_juego_deportes"."nombre" ASC
}}}
Nevertheless, the problem is given in the subquery that incrupta in the
first query.
In the ORM should be verified that both models belong to different data
base and generate the correct SQL, evaluating the second and not generate
a subquery.
--
Ticket URL: <https://code.djangoproject.com/ticket/25811>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.7287e4ba2d631d904ba36a7aa27b63f9%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.