Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SQLAlchemy整数字段创建用于筛选的timedelta对象_Python_Mysql_Sqlalchemy_Timedelta - Fatal编程技术网

Python 使用SQLAlchemy整数字段创建用于筛选的timedelta对象

Python 使用SQLAlchemy整数字段创建用于筛选的timedelta对象,python,mysql,sqlalchemy,timedelta,Python,Mysql,Sqlalchemy,Timedelta,我有一个叫做Item的对象。它有两个字段:一个名为“created_on”的日期时间行和一个名为“days”的整数行 我想查询“天”前创建的所有对象 我认为应该这样做: now = utcnow() session.query(Item).filter(Item.created_on + Interval(timedelta(days=Item.days)) <= now) 更新: 多亏了van,我才应该使用内置功能。我使用的是Mysql 5.1,所以它应该是timestampadd。我

我有一个叫做Item的对象。它有两个字段:一个名为“created_on”的日期时间行和一个名为“days”的整数行

我想查询“天”前创建的所有对象

我认为应该这样做:

now = utcnow()
session.query(Item).filter(Item.created_on + Interval(timedelta(days=Item.days)) <= now)
更新:

多亏了van,我才应该使用内置功能。我使用的是Mysql 5.1,所以它应该是
timestampadd
。我的新问题是:

now = utcnow()
session.query(Item).filter(func.timestampadd('DAY', Item.days, Item.created_on) <= now)
now=utcnow()

session.query(Item).filter(func.timestampadd('DAY',Item.days,Item.created_on)我认为
Interval
在这方面对您没有帮助,因为它无法强制使用DB特定的日期[时间]函数。因此您可能应该使用平台特定的日期[时间]函数来解决这个问题

如果您使用的是postgresql,下面的代码应该可以工作(假设
Items.days
为整数):

q=(session.query(项)
.filter(funct.age(现在,Item.created_on)
now=utcnow()

session.query(Item.filter)(Item.created_on+func.make_间隔(0,0,0,Item.days)最好在答案中添加一些解释。这样,未来的用户也可以更好地理解您的贡献是什么,如果Item.days是一个float怎么办?@mpunset:
secs
param是
double
。所以只需将您的值转换为秒,并作为
secs
参数传递即可。
now = utcnow()
session.query(Item).filter(func.timestampadd('DAY', Item.days, Item.created_on) <= now)
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
q = (session.query(Item)
     .filter(func.age(now, Item.created_on) <=
             func.make_interval(0, 0, 0, Item.days)
             )
     )
now = utcnow()
session.query(Item).filter(Item.created_on + func.make_interval(0, 0, 0, Item.days) <= now)