我有一张非常简单的桌子。 (现在加载废话数据)
我的目标 - 给定日期,检索会话中的当前条款。 (日期> =期限开始< =期末)
这样做很好。
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
甚至不包含在查询中。我做错了什么?
答案 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)