如何在SQLAlchemy查询中对DateTime字段和datetime.datetime对象进行比较?
例如,如果我这样做
candidates = session.query(User).filter_by((User.time - datetime.datetime.utcnow()) > datetime.timedelta(months=2))
我会得到
TypeError: unsupported operand type(s) for -: 'DateTime' and 'datetime.datetime'
我猜这是因为当我们使用filter_by命令时,DateTime字段永远不会被完全提取,因此它不会被转换为datetime.datetime对象?它是否正确? SQLAlchemy用户通常如何处理这个问题?
注意:User.time是DateTime字段。
答案 0 :(得分:2)
首先,请注意datetime.timedelta不会将'months'作为参数。请尝试使用'周= 8'代替(http://docs.python.org/2/library/datetime.html#datetime.timedelta)。
其次,使用'filter'而不是'filter_by',因为后者用于涉及按值查询的简单查询(即User.name ='Bob'http://docs.sqlalchemy.org/en/rel_0_8/orm/query.html#sqlalchemy.orm.query.Query.filter)。
所以,我写的会是这样的:
candidates = session.query(User).filter((User.time - datetime.datetime.utcnow()) > datetime.timedelta(weeks=8))
最后,“用户”表的映射是什么,可能问题出在列定义上?