2

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

4

1 回答 1

2

首先,请注意 datetime.timedelta 不以 'months' 作为参数。改用 'weeks=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))

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

于 2013-07-16T19:04:23.260 回答