SQLAlchemy DateTime到datetime.datetime

时间:2013-07-16 16:49:27

标签: python sql sqlalchemy

如何在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字段。

1 个答案:

答案 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))

最后,“用户”表的映射是什么,可能问题出在列定义上?