我用flask-sqlalchemy 定义了一个表。显示如下。
class Notes(db.Model):
id = db.Column(db.Integer, primary_key=True)
notes = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
added_at = db.Column(db.DateTime, default=db.func.now())
@staticmethod
def newest(num):
return Notes.query.order_by(desc(Notes.added_at)).limit(num)
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个查询来替换和已经存在的直接查询,它看起来像这样。
select notes,user,added_at from notes where added_at >= now() - INTERVAL 8 HOUR;
Run Code Online (Sandbox Code Playgroud)
但是,根据我可以找到的文档,我无法找到执行相同操作的方法。我能够进行更简单的查询,但我正在努力重新创建 sql 本身中非常简单的内容。
我非常愿意阅读一些围绕它的文档,但也无法准确地确定下来。你能提供的任何方向都会很棒。
我有一个名为 Item 的对象。它有 2 个字段:一个名为“created_on”的日期时间行和一个名为“days”的整数行。
我想查询多天前“几天”创建的所有对象。
这是我认为应该这样做的方式:
now = utcnow()
session.query(Item).filter(Item.created_on + Interval(timedelta(days=Item.days)) <= now)
Run Code Online (Sandbox Code Playgroud)
但我无法创建这样的时间增量。我收到此错误:
TypeError: unsupported type for timedelta minutes component: InstrumentedAttribute
Run Code Online (Sandbox Code Playgroud)
更新:
感谢 van,我应该使用内置函数。我使用的是 Mysql 5.1,所以它是timestampadd. 我的新查询是这样的:
now = utcnow()
session.query(Item).filter(func.timestampadd('DAY', Item.days, Item.created_on) <= now)
Run Code Online (Sandbox Code Playgroud)
但是,我得到的新错误是:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''DAY', items.days, items.created_on) <= '2015-07-12 ' at line 3
Run Code Online (Sandbox Code Playgroud)