﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
25811	Error querying models in different databases in one queryset	Edwar Baron	nobody	"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."	Cleanup/optimization	closed	Database layer (models, ORM)	dev	Normal	fixed	database	edwar.baron@… Anssi Kääriäinen	Ready for checkin	1	0	0	0	0	0
