PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie SQLAlchemy pokazuje błąd Nie można dołączyć do siebie tabeli/wybieralnych przepływów pracy

Część

.query(Workflow.user_id, func.count(Log.id))

dodaje oba Workflow i Log na Twoje zapytanie. Pierwszy model jest oznaczony jako tabela podstawowa, a pozostałe jako drugorzędne. Jeśli nie ma wywołań .join() potem do FROM zostaną dodane zarówno tabele podstawowe, jak i dodatkowe klauzula. Jeśli istnieją wywołania .join() przeniesie otrzymaną tabelę do JOIN klauzula. Ważną rzeczą tutaj jest to, że .join() można zastosować tylko do tabeli dodatkowej.

Problem polega na tym, że Twój telefon do

.join(Workflow, Workflow.id == Log.workflow_id)

próbuje oznaczyć tabelę podstawową jako połączoną. Aby rozwiązać problem, musisz dołączyć do drugiego stołu:

.join(Log, Workflow.id == Log.workflow_id)

Możesz dodać echo=True aby zobaczyć SQL wygenerowany przez SQLAlchemy. Debugowanie zapytań jest naprawdę wygodne. Możesz też kompilować jedno zapytanie, aby zobaczyć wygenerowany SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql -bash:psql:nie znaleziono polecenia

  2. PostgreSQL:Dlaczego to zapytanie nie używa mojego indeksu?

  3. Usuń rodzica, jeśli nie odwołuje się do niego żadne inne dziecko

  4. Postgres nie może nasłuchiwać określonego adresu IP

  5. Najlepsza praktyka identyfikowania wartości null jsonb w plpgsql