sqlalchemy中DATE类型的比较

有一个程序需要从数据库里读取每天新增的数据然后做一些处理,数据库是Oracle,add_time这个字段使用的是DATE类型,在sql语句中,可以用

select * from DATA where ADD_TIME >= to_date('2017-12-21', 'YYYY-MM-DD')

这里的2017-12-21是当天日期,数据库的日期格式是2017-12-21 10:21:45这种形式。上述sql语句可以查出在2017-12-21及之后日期的数据,注意,上面>=即使换成>也会包含2017-12-21这一天的数据。这一点挺让人疑惑的。

那么如何在sqlalchemy中实现类似上述sql语句的比较呢?答案是使用datetime模块

date_format = '%Y-%m-%d'
today = time.strftime(date_format,time.localtime())
with get_db_session() as db_session:
    dt = datetime.strptime(today, date_format).date()
    rs = db_session.query(Data.se_userid,Data.se_sid,Data.se_mid).filter(Data.add_time > dt).all()

这样就可以实现上述sql语句相同的效果了。该代码在Oracle上进行了验证,未在MySQL等数据库进行验证。应该其它数据库都差不多,sqlalchemy自己做了一层转化,这里并未使用Oracle的方言。