sqlalchemy过滤器通过比较datetime.now()和列默认日期

时间:2015-03-04 15:49:15

标签: python sqlite datetime sqlalchemy

在我的表定义中,我有一个像这样定义的列:

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&#39;对象也不是&#39;比较器&#39;对象有一个属性&#39; days&#39;。

那么我应该如何进行过滤当天创建的实例的查询呢?谢谢!

3 个答案:

答案 0 :(得分:3)

我怀疑(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())

答案 1 :(得分:0)

您要获取已创建日期==当前日期的行 例如,您的表格列

| ID |已创建|

| 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()

您将获得输出:

| ID |已创建|

| 2 | 2019-02-14 12:48:49 |

| 3 | 2019-02-14 12:48:49 |

更多信息HERE

答案 2 :(得分:0)

这是我如何获取与一个日期或特定日期相关的所有条目的方法。

<tbody>
        @foreach (DataRow row in Model.PreviewDataTable.Rows)
        {
        <tr>
            @foreach (DataColumn col in Model.PreviewDataTable.Columns)
            {
            <td>
                @if (col.ColumnName.Equals("C_Date"))
                {
                    @Convert.ToDateTime(row[col.ColumnName]).ToString("yyyy/MM/dd");
                }
                else
                {
                    @row[col.ColumnName];
                }

            </td>
            }
        </tr>
        }
    </tbody>