如何在sqlalchemy关系中使用日期(时间)算法?

时间:2016-11-15 20:47:42

标签: python date datetime sqlalchemy

我有一些看起来像这样的东西:

from sqlalchemy import sa
from sqlalchemy.ext.declarative import declarative_base

metadata = sa.MetaData(schema='myschema')
Base = declarative_base(metadata=metadata)


class MyThing(Base):
     __tablename__ = 'thing'

     ...
     id = sa.Column('id', sa.Integer, primary_key=True)

     recent_things = sa.orm.relationship(
         'OtherThing',
         primaryjoin="and(MyThing.id==OtherThing.thing_id,"
         "OtherThing.timestamp >= now - 60)"
     )



class OtherThing(Base):
    __tablename__ = 'others'

    ...
    thing_id = sa.Column('thing_id', sa.Integer, nullable=False)
    timestamp = sa.Column('timestamp', sa.DateTime)

不幸的是,这不起作用。我还尝试了>= remote('now - 60')和其他一些变体。每个都失败,有各种例外。

如何正确设置此查询以执行我想要的操作?我发现了一个表明ADDDATE函数的结果,但它似乎不再是sqlalchemy的一部分了。

1 个答案:

答案 0 :(得分:1)

尝试在表达式中使用func.now()而不是现在:

recent_things = sa.orm.relationship(
    'OtherThing', primaryjoin="and(MyThing.id==OtherThing.thing_id,"
    "OtherThing.timestamp >= func.now() - 60)"
)

以下是func:http://docs.sqlalchemy.org/en/rel_0_9/core/functions.html#sqlalchemy.sql.functions.func

的文档页面