Also, ich habe drei Tabellen:
Die Klassenverteidigung:
%Vor%HINWEIS: Ich weiß, dass user.username eindeutig sein sollte, das muss behoben werden, und ich bin nicht sicher, warum SQLalchemy einige Zeilennamen mit den doppelten Anführungszeichen erstellt.
Und ich versuche, einen Weg zu finden, alle Kanäle abzufragen, sowie einen Hinweis darauf, welche Kanäle ein bestimmter Benutzer (identifiziert durch user.sessionId zusammen mit user.id) abonniert hat.
Nehmen wir zum Beispiel an, wir haben vier Kanäle: channel1, channel2, channel3, channel4; ein Benutzer: user1; Wer hat ein Abonnement auf channel1 und channel4? Die Abfrage für Benutzer1 würde etwas zurückgeben:
%Vor%Dies ist ein Best-Case-Ergebnis, aber da ich absolut keine Ahnung habe, wie die abonnierte Spalte zu erreichen ist, habe ich stattdessen versucht, die bestimmte Benutzer-ID in den Zeilen zu erhalten, wo der Benutzer ein Abonnement hat und wo a Abonnement fehlt, lass es einfach leer.
Die Datenbank-Engine, die ich zusammen mit SQLalchemy atm verwende. ist sqlite3
Ich habe mir schon seit zwei Tagen den Kopf darüber gekratzt, ich habe kein Problem damit, alle drei über die Abonnement-Tabelle zu verbinden, aber dann werden alle Kanäle ausgelassen, auf denen der Benutzer kein Abonnement hat.
Ich hoffe, ich habe es geschafft, mein Problem ausreichend zu beschreiben, danke im Voraus.
BEARBEITEN : Verwaltet, um das Problem mit einer Unterabfrage leicht zu lösen:
%Vor%Ich werde jedoch weiterhin nach einer eleganteren Lösung suchen, daher sind die Antworten immer noch sehr willkommen.
Option-1:
Subscription
ist nur ein Viele-zu-Viele-Beziehungsobjekt, und ich würde vorschlagen, dass Sie es als solches anstatt als separate Klasse modellieren. Siehe Viele-zu-viele-Beziehungen konfigurieren von %Code%.
Sie modellieren mit dem Testcode wird:
%Vor%erzeugt folgende Ausgabe:
%Vor% Bitte beachten Sie die Verwendung von SQLAlchemy/declarative
, die nur 1 SELECT-Anweisung anstelle von 1 für jede eagerload
ausgibt, wenn User
angefordert wird.
Option-2:
Aber wenn Sie Ihr Modell behalten und nur eine SA-Abfrage erstellen möchten, die Ihnen die Spalten liefert, während Sie fragen, sollte die folgende Abfrage die Aufgabe erledigen:
%Vor%Die Ausgabe ist absolut dieselbe wie in der obigen Option 1.
Tags und Links python sql sqlite sqlalchemy