sqlalchemy 通过比较 datetime.now() 和列默认日期进行过滤
sqlalchemy filter by comparing datetime.now() and column default date
在我的 table 定义中,我有一列定义如下:
created_date = Column(DateTime, nullable=False, default=datetime.now)
我想查询创建日期等于当前日期的实例(例如,如果它是今天创建的)。
所以我尝试了这样的事情:
res = session.query(Object).filter(datetime.now() == Object.created_date)
它永远不会起作用,因为我猜两个日期是以秒为单位进行比较的,所以它们永远不会相等。然后我试了这个:
res = session.query(Object).filter((datetime.now() - Object.created_date).days < 1)
虽然 (datetime.now() - datetime.now()).days
在 python 中有效,但它在我这里的情况下不起作用。我收到错误消息:'BinaryExpression' 对象和 'Comparator' 对象都没有属性 'days'。
那么我应该如何进行查询以过滤当天创建的实例?谢谢!
我怀疑 (datetime.now() - datetime.now()).days
是否有效,因为 datetime.datetime
实例仅具有名为 day
而不是 days
的属性。使用 datetime.now().days
将导致 AttributeError: 'datetime.datetime' object has no attribute 'days'
你可以试试这个:
from datetime import timedelta
res = session.query(Object).filter(
(Object.created_date+timedelta(days=1))>datetime.now())
您想获取创建日期 == 当前日期的行
例如,您的 table 列
|编号 |已创建 |
| 1 | 2019-02-13 12:48:49 |
| 2 | 2019-02-14 12:48:49 |
| 3 | 2019-02-14 12:48:49 |
今天是: 2019-02-14
你可以试试这个
from sqlalchemy import exc, extract
from datetime import datetime, date, timedelta
res = session.query(Object).filter(
extract('month', Object.created) >= datetime.today().month,
extract('year', Object.created) >= datetime.today().year,
extract('day', Object.created) >= datetime.today().day)
).all()
你将得到输出:
|编号 |已创建 |
| 2 | 2019-02-14 12:48:49 |
| 3 | 2019-02-14 12:48:49 |
您可以找到更多内容
这就是我如何获得与一个日期或特定日期相关的所有条目的方式。
from datetime import date
start = date(year=2019, month=12, day=30)
today_date = date.today()
with DBConx(TEST_METRICS) as db_conx:
answer = db_conx.the_session.query(TestRun).filter(
(TestRun.datetime) >= start)
# This will print all entries from the start date.
print (len(answer.all()))
answer = db_conx.the_session.query(TestRun).filter(
(TestRun.datetime) == the_date)
# This will print all entries of today.
print (answer.all())
在我的 table 定义中,我有一列定义如下:
created_date = Column(DateTime, nullable=False, default=datetime.now)
我想查询创建日期等于当前日期的实例(例如,如果它是今天创建的)。
所以我尝试了这样的事情:
res = session.query(Object).filter(datetime.now() == Object.created_date)
它永远不会起作用,因为我猜两个日期是以秒为单位进行比较的,所以它们永远不会相等。然后我试了这个:
res = session.query(Object).filter((datetime.now() - Object.created_date).days < 1)
虽然 (datetime.now() - datetime.now()).days
在 python 中有效,但它在我这里的情况下不起作用。我收到错误消息:'BinaryExpression' 对象和 'Comparator' 对象都没有属性 'days'。
那么我应该如何进行查询以过滤当天创建的实例?谢谢!
我怀疑 (datetime.now() - datetime.now()).days
是否有效,因为 datetime.datetime
实例仅具有名为 day
而不是 days
的属性。使用 datetime.now().days
将导致 AttributeError: 'datetime.datetime' object has no attribute 'days'
你可以试试这个:
from datetime import timedelta
res = session.query(Object).filter(
(Object.created_date+timedelta(days=1))>datetime.now())
您想获取创建日期 == 当前日期的行 例如,您的 table 列
|编号 |已创建 |
| 1 | 2019-02-13 12:48:49 |
| 2 | 2019-02-14 12:48:49 |
| 3 | 2019-02-14 12:48:49 |
今天是: 2019-02-14
你可以试试这个
from sqlalchemy import exc, extract
from datetime import datetime, date, timedelta
res = session.query(Object).filter(
extract('month', Object.created) >= datetime.today().month,
extract('year', Object.created) >= datetime.today().year,
extract('day', Object.created) >= datetime.today().day)
).all()
你将得到输出:
|编号 |已创建 |
| 2 | 2019-02-14 12:48:49 |
| 3 | 2019-02-14 12:48:49 |
您可以找到更多内容
这就是我如何获得与一个日期或特定日期相关的所有条目的方式。
from datetime import date
start = date(year=2019, month=12, day=30)
today_date = date.today()
with DBConx(TEST_METRICS) as db_conx:
answer = db_conx.the_session.query(TestRun).filter(
(TestRun.datetime) >= start)
# This will print all entries from the start date.
print (len(answer.all()))
answer = db_conx.the_session.query(TestRun).filter(
(TestRun.datetime) == the_date)
# This will print all entries of today.
print (answer.all())