SQLAlchemy - 在嵌套的OR关系中计算无案例

时间:2016-03-11 15:54:55

标签: python sqlalchemy

我有一张非常简单的桌子。 (现在加载废话数据)

enter image description here

我的目标 - 给定日期,检索会话中的当前条款。 (日期> =期限开始< =期末)

这样做很好。

    query = Session.query(schema.Term).\
        filter(and_(schema.Term.term_begin <= form.year.data,
                    (schema.Term.term_end >= form.year.data ))

但是,当我尝试说明该术语仍处于会话 IE term_end is None的情况时,它不会检索第3行。输入2016-03-10应检索所有3条记录。

我正在尝试使用此查询。

    query = Session.query(schema.Term).\
        filter(and_(schema.Term.term_begin <= form.year.data,
                    or_(schema.Term.term_end >= form.year.data, schema.Term.term_end is None)))

但是返回与上面相同的查询。 2016年3月10日

SELECT terms.id AS terms_id, terms.term_begin AS terms_term_begin, ter
ms.term_end AS terms_term_end, terms.term_served AS terms_term_served, terms.off
ice_id AS terms_office_id, terms.person_id AS terms_person_id, terms.state_id AS
 terms_state_id, terms.removal_reason_id AS terms_removal_reason_id
FROM terms
WHERE terms.term_begin <= :term_begin_1 AND terms.term_end >= :term_end_1

单词or甚至不包含在查询中。我做错了什么?

1 个答案:

答案 0 :(得分:1)

使用'== None'代替'is None'

conn.query(Identifier.Key)\
    .filter(and_(Identifier.DatetimeStart <= datetime.datetime.now(),
        or_(Identifier.DatetimeEnd <= datetime.datetime.now(), Identifier.DatetimeEnd == None)))\
    .all()

SELECT identifier.identifier_id AS identifier_identifier_id 
    FROM identifier 
    WHERE identifier.datetime_start <= ? AND (identifier.datetime_end <= ? OR identifier.datetime_end IS NULL)