2017-05-29 2 views
0

Ich versuche Beziehungen in flask_sqlalchemy zu lernen, aber wirklich harte Zeit, um den Code arbeiten zu bekommen. Erstens mangelt es an guten Tutorials zu diesem Thema, aber ich habe mich trotzdem einigen Bits und Informationen angeschlossen, um etwas Code zu schreiben, aber ich bekomme nicht die erwarteten Ergebnisse.Verständnis von einer zu vielen Beziehungen in flask_sqlalchemy

Können Sie in diesem Code erklären, was ich falsch mache?

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://<my_user>:<my_password>@localhost/flask_apps' 
db = SQLAlchemy(app) 


class Universe(db.Model): 
    __tablename__ = 'universe' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(30)) 
    hero = db.relationship('Characters', backref='u_name', lazy='dynamic') 


class Characters(db.Model): 
    __tablename__= 'characters' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50)) 
    uni = db.Column(db.Integer, db.ForeignKey('universe.id')) 

if __name__ == '__main__': 
    db.drop_all() 
    db.create_all() 
    dc = Universe(name='DC') 
    marvel = Universe(name='Marvel') 
    db.session.add(dc) 
    db.session.add(marvel) 
    db.session.commit() 
    flash = Characters(name='Flash', u_name=dc) 
    batman = Characters(name='Batman', u_name=dc) 
    arrow = Characters(name='Arrow', u_name=dc) 
    ironman = Characters(name='IronMan', u_name=marvel) 
    thor = Characters(name='Thor', u_name=marvel) 
    db.session.add(flash) 
    db.session.add(ironman) 
    db.session.commit() 

    u = Universe.query.filter_by(name='DC').first() 
    print(u.hero) 

Und das ist die Ausgabe, die ich bekomme.

SELECT characters.id AS characters_id, characters.name AS characters_name, characters.uni AS characters_uni 
FROM characters 
WHERE %(param_1)s = characters.uni 

Process finished with exit code 0 

Ich erwarte die Namen von Charakteren, die diese bestimmte Universum gehören zu bekommen. Ich bin mir nicht sicher, was ich hier vermisse.

Antwort

0

Ich konnte dies lösen, das Problem war die Fehlinterpretation von hero als ein einzelnes Attribut, die stattdessen eine Sammlung ist. Also funktioniert die folgende Abfrage.

u = Universe.query.filter_by(name='DC').first() 
    for item in u.hero[:]: 
     print(item.name) 
Verwandte Themen