Frage

Ich versuche, eine einfache Join-Abfrage wie diese durchzuführen:

SELECT food._id, food.food_name, food_categories.food_categories FROM food JOIN food_categories ON food.food_category_id = food_categories._id

erhalte aber weiterhin eine Fehlermeldung.So sind meine Kurse aufgebaut.

class Food_Categories(db.Model):
    __tablename__ = 'food_categories'
    _id = db.Column(db.Integer, primary_key=True)
    food_categories = db.Column(db.String(30))

class Food(db.Model):
    __tablename__ = 'food'
    _id = db.Column(db.Integer, primary_key=True)
    food_name = db.Column(db.String(40))
    food_category_id = db.Column(db.Integer, ForeignKey(Food_Categories._id))
    food_category = relationship("Food_Categories")

Meine Abfragefunktion sieht so aus.

@app.route('/foodlist')
def foodlist():
    if request.method == 'GET':
        results = Food.query.join(Food_Categories.food_categories).all()

    json_results = []
    for result in results:
        d = {'_id': result._id,
         'food': result.food_name,
         'food_category': result.food_categories}
    json_results.append(d)

    return jsonify(user=json_results)

Ich verwende Flask.Wenn ich die Route aufrufe, erhalte ich diesen Fehler.

AttributeError: 'ColumnProperty' object has no attribute 'mapper'

Ich möchte im Wesentlichen Folgendes:

|      id       |    food_name    |    food_category    |

und lassen Sie die Spalte food_category_id durch den tatsächlichen Namen der Lebensmittelkategorie ersetzen, die sich in einer anderen Tabelle befindet.

Sind meine Tabellen/Beziehungen korrekt eingerichtet?Ist meine Abfrage korrekt eingerichtet?

War es hilfreich?

Lösung

Ihre Tabellen und Beziehungen sind korrekt eingerichtet.Ihre Anfrage muss geändert werden.

Der Grund für einen Fehler liegt darin, dass Sie versuchen, einen Join für die Spalte durchzuführen (Food_Categories.food_categories) anstelle einer Tabelle (oder eines zugeordneten Modellobjekts).Technisch gesehen sollten Sie Ihre Abfrage durch die folgende ersetzen, um den Fehler zu beheben:

results = Food.query.join(Food_Categories).all()

Dadurch wird der Fehler behoben, es wird jedoch kein Fehler generiert SQL Anweisung, die Sie wünschen, da sie Instanzen von zurückgibt Food nur als Ergebnis, obwohl es einen Join gibt.

Um eine Abfrage zu erstellen, die genau das generiert SQL Aussage, die Sie im Sinn haben:

results = (db.session.query(Food._id, Food.food_name,
        Food_Categories.food_categories,)
    .join(Food_Categories)).all()
for x in results:
    # print(x)
    print(x._id, x.food_name, x.food_categories)

Bitte beachten Sie, dass es sich in diesem Fall bei den Ergebnissen nicht um Instanzen von handelt Food, sondern vielmehr tuples mit 3 Spaltenwerten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top