所以我是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)
我得到的错误是"无法分配到函数调用"当我鼠标悬停我的查询和SyntaxError时:关键字在我尝试编译它时不能成为表达式。我不知道我可以在此代码中更改哪些内容以使其正常工作; /
P.S。好的,我读了一些东西,现在我的代码看起来像这样
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)
问题在于结果。当我使用它时,你看到结果是正确的。当我取消注释下一行(或任何下一行)时,其中包含'或'突然结果是空的。不要理解为什么会这样发生。有什么想法吗?
答案 0 :(得分:1)
.filter(model.Grupa.rodzaj = 'Ćw',
# ^
也许你应该在这里使用==
?
BTW您.filter
行太长了。考虑将其分成多行:
# Note: The code is modified only for syntax, it does not mean the query works correctly.
query = (
model.Grupa.query.join(prowadzacy_tytul_subq,
model.Studia,
model.Przedmiot,
model.Sala)
.filter(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)
# ^^ should be 'Wf' here?
.order_by(model.Grupa.dzien_tyg, model.Grupa.godz_rozp)
)