python - 尝试在 sqlachemy python 中按 date.today() 过滤时出现参数错误
问题描述
尝试按今天的日期过滤时出现 sqlalchemy.exc.ArgumentError
能够打印出日期 date.today() 但是当我将它与 sqlalchemy 一起使用时,它的抛出属性错误告诉一个约束是预期的
我试过的代码
def daily_Fitness() :
result = Fitness.query.filter_by ( date.today () )
for result in result :
result.append ( {"Yoga" : Fitness.activity_type_1 , "Jogging" : Fitness.activity_type_2 ,
"Walking" : Fitness.activity_type_2 ,
"time" : Fitness.fitness_time ,
"comments" : Fitness.comments
} )
return result
输出
Traceback (most recent call last):
File "C:\Users\siveg\anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 124, in _init_items
spwd = item._set_parent_with_dispatch
AttributeError: 'datetime.date' object has no attribute '_set_parent_with_dispatch'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:/Users/siveg/gitProject/python-project-template/python-project-template/application/models.py", line 10, in <module>
class Food(db.Model) :
File "C:/Users/siveg/gitProject/python-project-template/python-project-template/application/models.py", line 16, in Food
date=db.Column (date.today(), unique=True , nullable=False )
File "C:\Users\siveg\anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 1636, in __init__
self._init_items(*args)
File "C:\Users\siveg\anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 126, in _init_items
util.raise_(
File "C:\Users\siveg\anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 211, in raise_
raise exception
sqlalchemy.exc.ArgumentError: 'SchemaItem' object, such as a 'Column' or a 'Constraint' expected, got datetime.date(2021, 7, 27)
代码说明
假设为当前日期获取该特定表的数据
预期产出
Able to successfully fetch the data entered from the table as specified
{"Yoga" : Fitness.activity_type_1 , "Jogging" : Fitness.activity_type_2 ,
"Walking" : Fitness.activity_type_2 ,
"time" : Fitness.fitness_time ,
"comments" : Fitness.comments}
解决方案
filter_by
期望关键字参数,其关键字是列名,整个值是要过滤的。
所以在这种情况下,如果你有一个像这样的表:
from datetime import date
class FitnessRoutine(Base):
__tablename__ = 'fitness_routines'
id = Column(Integer, primary_key=True, index=True)
scheduled_on = Column(Date, default=date.today)
您将传递filter_by
列的名称scheduled_on
:
routines_for_today = FitnessRoutine.query.filter_by(scheduled_on=date.today())
https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.filter_by
推荐阅读
- html - 希望文本叠加层对其背景做出响应
- c# - Azure 上的 BotFramework 间歇性身份验证错误
- javascript - 将文本项目符号动态添加到文本区域
- angular - 传递 ngSubmit 作为参考 Angular
- r - 仅在初始化期间“解锁”R6 类
- java - Spring Batch 创建多个文件 .Gradle 基于项目
- html - 没有任何内容的 HTML 页面可滚动
- mdx - MDX 问题 - 使用具有排名/顺序功能的最高计数
- javascript - 使元素在 div 中出现并跟随鼠标,并在鼠标离开 div 时消失
- asp.net - 重写规则:关于正则表达式模式的问题