Ich habe zwei Tabellen Eintrag und Gruppen in Python definiert Flask SQLAlchemy zu einer PostgresSQL Datenbank verbunden mit:Wie führt man einen natürlichen Join auf zwei Tabellen mit SQLAlchemy und Flask durch?
class Entry (db.Model):
__tablename__ = "entry"
id = db.Column('id', db.Integer, primary_key = True)
group_title = db.Column('group_title', db.Unicode, db.ForeignKey('group.group_title'))
url = db.Column('url', db.Unicode)
next_entry_id = db.Column('next_entry_id', db.Integer, db.ForeignKey('entry.id'))
entry = db.relationship('Entry', foreign_keys=next_entry_id)
group = db.relationship('Group', foreign_keys=group_title)
class Group (db.Model):
__tablename__ = "group"
group_title = db.Column('group_title', db.Unicode, primary_key = True)
group_start_id = db.Column('group_start_id', db.Integer)
#etc.
Ich versuche, die zwei Tabellen mit einem natürlichen zu kombinieren verbinden die Entry.id
und Group.group_start_id
als gemeinsames Feld.
Ich konnte eine einzige Tabelle für alle Datensätze abfragen. Aber ich möchte Tabellen durch Fremdschlüssel-ID verbinden, um Datensätze zu geben, die sich auf Group.group_start_id
und Group.group_title
auf einen bestimmten Entry
Datensatz beziehen.
Ich habe Probleme mit der Kolben-SQLAlchemy Abfragesyntax oder Prozess
ich verschiedene Ansätze versucht habe (zur Liste einig):
db.session.query(Group, Entry.id).all()
db.session.query(Entry, Group).all()
db.session.query.join(Group).first()
db.session.query(Entry, Group).join(Group)
Alle von ihnen haben eine Liste von Tupeln zurückgegeben, die größer ist als erwartet und enthält nicht, was ich will. Ich suche folgendes Ergebnis: (Entry.id, group_title, Group.group_start_id, Entry.url)
Ich wäre für jede Hilfe dankbar.
Danke für den Vorschlag! Leider suche ich nicht genau danach. Mit dem Abfragetool in pgAdmin kann ich diese Abfrage verwenden, um die gesuchte Tabelle zu erhalten: 'wähle * aus" group "join" entry "auf" group ".group_start_id =" entry ".id;'. Wie kann ich das mit dem SQLAlchemy-Modellsystem ausführen? Ich bin in der Lage, die rohe Abfrage über 'db.engine.execute' auszuführen, und ich bekomme das Ergebnis, das ich will, aber es ist ein Tupel und kein Dictionary Style-Objekt, wie es bevorzugt würde. –
Funktioniert der Beispielcode, den ich geschrieben habe, nicht? Oder ist da noch etwas falsch? –