使用SQLAlchemy在两秒内过滤对象

Esc*_*alo 5 python database datetime sqlalchemy

我有两个表'date'列.一个持有(名称,日期),另一个持有(日期,p1,p2).给定一个名称,我想使用表1中的日期来查询表2中的p1和p2; 如果表1中的日期在表2中的日期的两秒内,则匹配应该发生.

你如何使用SQLAlchemy实现这一目标?

我试过(不成功)使用between运算符并使用如下子句:

td = datetime.timedelta(seconds=2)
q = session.query(table1, table2).filter(table1.name=='my_name').\
    filter(between(table1.date, table2.date - td, table2.date + td))
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

编辑: 我已设法使用以下方法解决问题:

from sqlalchemy.sql import between
import datetime
# [all other relevant imports]

td = datetime.timedelta(seconds=2)
t1_entry = session.query(table_1).filter(table_1.name == 'the_name').first()
if t1_entry is not None:
 tmin = t1_entry.date - td
 tmax = t1_entry.date + td
 t2_entry = session.query(table_2).filter(between(table_2.date, tmin, tmax)).first()
 return (t1_entry, t2_entry)
return None
Run Code Online (Sandbox Code Playgroud)

所以可以进行比较,但我不确定这种方法是否有效.

Esc*_*alo 0

提出这个问题一段时间后,到目前为止我想出的方法是:

from sqlalchemy.sql import between
import datetime
# [all other relevant imports]

td = datetime.timedelta(seconds=2)
t1_entry = session.query(table_1).filter(table_1.name == 'the_name').first()
if t1_entry is not None:
 tmin = t1_entry.date - td
 tmax = t1_entry.date + td
 t2_entry = session.query(table_2).filter(between(table_2.date, tmin, tmax)).first()
 return (t1_entry, t2_entry)
return None
Run Code Online (Sandbox Code Playgroud)

如果您有更好的想法,我会接受您的答案。