Sqlalchemy python如何使用IN查询日期时间列表

时间:2017-10-20 23:33:15

标签: python datetime sqlalchemy

我想使用时间戳列表进行过滤。在SQL中,语法类似于

SELECT * FROM TABLE WHERE TABLE.QueryTimestamp IN ("2017-10-20 23:20:00", "2017-10-10 23:20:00")

QueryTimestamp列是Python中的日期时间。

我尝试使用以下内容,但未提供正确的答案。 ts_list是python日期时间值的列表。

session.query(TABLE).filter(TABLE.QueryTimestamp.in_(ts_list))).all()

2 个答案:

答案 0 :(得分:1)

您应该使用or_运算符过滤结果,因为它们是时间戳。

from sqlalchemy import or_, cast
q = session.query(TABLE).filter(
       or_(TABLE.QueryTimestamp == cast("2017-10-20 23:20:00", DateTime), 
           TABLE.QueryTimestamp == cast("2017-10-10 23:20:00", DateTime))
    ).all()

答案 1 :(得分:0)

我能够通过运行计数查询来获得所需的答案,其中ts_list是日期时间元素的列表

template <typename P1, typename... Ps>
constexpr auto pipe(P1 &&proc1, Ps &&...procs) {
  using T = typename RevProc<P1>::ArgType;
  using U = typename RevProc<P1>::RetType;
  using V = typename RevProc<typename Last<Ps...>::Type>::RetType;
  return Cont<Cont<Proc<T, V>>>([&](Cont<Proc<T, V>> &&pass) {
    pipe(std::move(procs)...)([&](Proc<U, V> &&proc2) {
      pipe(std::move(proc1), std::move(proc2))(std::move(pass));
    });
  });
}