2013-07-16 3 views
2

Как вы делаете сравнения между полями DateTime и объектами datetime.datetime в запросах SQLAlchemy?SQLAlchemy DateTime to 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' 

Я предполагаю, что это не потому, что поле DateTime полностью никогда не извлекается, когда мы используем команду filter_by, следовательно, не прикрывается объекту datetime.datetime? Это верно? Как пользователи SQLAlchemy обычно справляются с этим?

Примечание: User.time - это поле DateTime.

ответ

2

Прежде всего, обратите внимание, что datetime.timedelta не принимает «месяцев» в качестве аргумента. Попробуйте вместо этого «недели = 8» (http://docs.python.org/2/library/datetime.html#datetime.timedelta).

Во-вторых, используйте «фильтр», а не «фильтр_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)) 

И, наконец, что такое отображение таблицы «User», может быть, проблема с определениями Columns?

Смежные вопросы