【问题标题】:Strange sqlalchemy error with '|' operator'|' 出现奇怪的 sqlalchemy 错误操作员
【发布时间】:2017-03-14 21:05:29
【问题描述】:

所以我正在使用 sqlalchemy 创建一个查询,但我不知道为什么会出现此错误。基本上我的代码如下所示:

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((model.Grupa.rodzaj == 'Ćw', model.Grupa.nr_grupy == nr_grupy_cw) | (model.Grupa.rodzaj == 'Ps' , model.Grupa.nr_grupy == nr_grupy_ps))


    )
    print(query)
    result = schema.GrupaSchema().dump(query, many=True)

    return jsonify(result)

当我将鼠标悬停在“|”上时运算符我得到 "Class'(bool,bool)' 没有定义 'or',所以 '|'运算符不能在其实例上使用”

在编译期间我得到 “sqlalchemy.exc.ArgumentError:需要 SQL 表达式对象或字符串,而是得到类型的对象”我做错了什么?

【问题讨论】:

  • 你试过or吗?
  • 当我使用 'or' 时,我得到的错误是:“sqlalchemy.exc.ArgumentError: SQL expression object or string expected, got object of type instead”
  • or 期望两边都有一个布尔值。你正在做(bool, bool) or (bool, bool)。尝试将其更改为 (bool and bool) or (bool and bool)
  • 好的,代码在更改之后开始编译,但是我打印了这个查询,我可以看到在这个查询中,最后一个过滤器没有任何内容,就像这条线不存在“WHERE studia. nazwa = %(nazwa_1)s AND grupa.nr_semestru = %(nr_semestru_1)s AND grupa.rodzaj = %(rodzaj_1)s" 这就是查询的结束方式。

标签: python sqlalchemy


【解决方案1】:

sqlalchemy 库中,您应该使用带有条件的or_() 作为参数。

并验证 condition_1condition_2bool 对象。而不是你提到的class(bool, bool)

例如:

from sqlalchemy import or_, and_
select().where( or_(condition_1, condition_2) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2020-03-10
    • 2011-01-08
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多