数据库模型:
class Expense(Base):
__tablename__ = "expenses"
id = Column(Integer, primary_key=True, unique = True, index=True)
item = Column(String, index=True)
price = Column(String, index=True)
currency = Column(String, index=True)
created_at = Column(DateTime, default=date.today())
使用SQLAlChemy,我希望获得今天添加的所有项。
我试过:
today = date.today()
res = db.query(Expense).filter(Expense.created_at == today).all()
但date.today()
返回2022-09-16
,Expense.created_at
返回2022-09-16 00:00:00
。我还尝试存储created_at = Column(DateTime, default=datetime.now())
和查询,如下所示:
today = datetime.now().day
res = db.query(Expense).filter(Expense.created_at.day == today).all()
但它返回一个错误。
1条答案
按热度按时间njthzxwz1#
有几种方法可以解决这个问题:第一种方法是使用BETWAGE来筛选某个日期,因为您的字段是
DateTime
,所以它会比较确切的日期和时间。所以,这里有一个例子:第二种方法是使用SQLAlChemy Layer Over DB内置函数。有一个内置的函数
date
可以获取日期时间字段的日期。下面是一个例子:另外,我发现您在设置一个专栏时犯了一个小错误:
这意味着每次您没有将
created_at
列提供给模型时,Created_at将是流程开始的日期,正如您所调用的函数today()
。Default期望接收Callable,而不是Function,因此它应该如下所示:
这样,当需要缺省值时,它将每次调用函数
date.today
。