Also ich bin frische Benutzer von Sqlalchemy und ich möchte eine große Abfrage erstellen. Hier ist mein CodeErstellen große Abfrage in Sqlalchemy
def post2(self, semestr):
nazwa_kierunku = 'stac. I st., kier. informatyka'
nr_semestru = 2
nr_grupy_cw = 3
nr_grupy_ps = 5
nr_grupy_l = 7
nr_grupy_w = 1
nr_grupy_p = 2
nr_grupy_s = 5
nr_grupy_j = 5
nr_grupy_wf = 1
prowadzacy_tytul_subq = model.Prowadzacy.query.join(model.Tytul).subquery()
query = model.Grupa.query.join(prowadzacy_tytul_subq,
model.Studia,
model.Przedmiot,
model.Sala).filter_by(model.Studia.nazwa == nazwa_kierunku, model.Grupa.nr_semestru == nr_semestru).filter(model.Grupa.rodzaj = 'Ćw', model.Grupa.nr_grupy == nr_grupy_cw).filter(model.Grupa.rodzaj = 'Ps', model.Grupa.nr_grupy == nr_grupy_ps).filter(model.Grupa.rodzaj = 'L', model.Grupa.nr_grupy == nr_grupy_l).filter(model.Grupa.rodzaj = 'W', model.Grupa.nr_grupy == nr_grupy_w).filter(model.Grupa.rodzaj = 'P', model.Grupa.nr_grupy == nr_grupy_p).filter(model.Grupa.rodzaj = 'S', model.Grupa.nr_grupy == nr_grupy_s).filter(model.Grupa.rodzaj = 'J', model.Grupa.nr_grupy == nr_grupy_j).filter(model.Grupa.rodzaj = 'Ćw', model.Grupa.nr_grupy == nr_grupy_wf).order_by(
model.Grupa.dzien_tyg,
model.Grupa.godz_rozp)
result = schema.GrupaSchema().dump(query, many=True)
return jsonify(result)
Der Fehler, den ich bekommen ist „nicht zuordnen Anruf funktionieren“, wenn ich meine Abfrage Mouseover- und Syntaxerror: Begriff nicht ein Ausdruck sein kann, während ich versuche, es zu kompilieren. Ich weiß nicht, was ich in diesem Code ändern kann, damit es funktioniert;/
P.S. Ok las ich ein paar Sachen und jetzt ist mein Code sieht wie folgt aus
def post(self, semestr):
nazwa_kierunku = 'stac. I st., kier. informatyka'
nr_semestru = 2
nr_grupy_cw = 3
nr_grupy_ps = 5
nr_grupy_l = 7
nr_grupy_w = 1
nr_grupy_p = 2
nr_grupy_s = 5
nr_grupy_j = 5
nr_grupy_wf = 1
prowadzacy_tytul_subq = model.Prowadzacy.query.join(model.Tytul).subquery()
query = (
model.Grupa.query.join(prowadzacy_tytul_subq,
model.Studia,
model.Przedmiot,
model.Sala)
.filter(model.Studia.nazwa == nazwa_kierunku)
.filter(model.Grupa.nr_semestru == nr_semestru)
.filter(or_(model.Grupa.rodzaj == 'Ćw', model.Grupa.nr_grupy == nr_grupy_cw))
.filter(or_(model.Grupa.rodzaj == 'Ps', model.Grupa.nr_grupy == nr_grupy_ps))
# .filter(or_(model.Grupa.rodzaj == 'L', model.Grupa.nr_grupy == nr_grupy_l))
#.filter(or_(model.Grupa.rodzaj == 'W', model.Grupa.nr_grupy == nr_grupy_w))
# .filter(or_(model.Grupa.rodzaj == 'P', model.Grupa.nr_grupy == nr_grupy_p))
# .filter(or_(model.Grupa.rodzaj == 'S', model.Grupa.nr_grupy == nr_grupy_s))
#.filter(or_(model.Grupa.rodzaj == 'J', model.Grupa.nr_grupy == nr_grupy_j))
# .filter(or_(model.Grupa.rodzaj == 'wf', model.Grupa.nr_grupy == nr_grupy_wf))
# .order_by(model.Grupa.dzien_tyg, model.Grupa.godz_rozp)
)
result = schema.GrupaSchema().dump(query, many=True)
return jsonify(result)
Das Problem entsteht. Wenn ich es benutze, wie Sie sehen, ist das Ergebnis richtig. Wenn ich die nächste Zeile (oder jede nächste) auskommentiere, die 'oder' hat, ist das Ergebnis plötzlich leer. Ich verstehe nicht wirklich, warum es so passiert. Irgendeine Idee?
compilator sagt .filter_by (model.Studia.nazwa == nazwa_kierunku, model.Grupa.nr_semestru == nr_semestru), dass in dieser Linie war Typeerror: filter_by() nimmt 1 Positionsargument aber 3 gegeben. Auch sollte es 'wf' und vielen Dank für Hinweis:> – Wesspe
ich beschlossen, diese filter_by in .filter_by aufzuspalten (model.Studia.nazwa == nazwa_kierunku) .filter (model.Grupa.nr_semestru == nr_semestru) noch compilator sagt filter_by() dauert 1 Position Argument, aber 2 wurden gegeben. Warum funktioniert filter_by nicht? – Wesspe
@Wesspe sieht aus wie Sie 'Filter' stattdessen verwenden müssen. 'filter_by' erwartet [kwargs] (http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python). – kennytm