【问题标题】:How to iterate over dates in Python/Mysql? 'datetime.date' is not iterable"如何在 Python/Mysql 中迭代日期? 'datetime.date' 不可迭代"
【发布时间】:2023-03-15 19:54:02
【问题描述】:

给定一个带有列(“标题”、“作者”、“日期”)的 Mysql 表。你好吗:

  1. 遍历数据库以将给定用户提供的日期输入与数据库列“日期”进行比较
  2. 将匹配记录附加到列表中

没有收到错误“TypeError:'datetime.date'类型的参数不可迭代”示例代码如下:Python 3.7

date = request.form.get("date")
list1=[]
list2=[]
list3=[]
results = db.session.query(Books).all()
for i in results:
     if date in i.date is True:
          list1.append(i.title)
          list2.append(i.author)
          list3.append(i.date)


---------------------------------------------------------------------------

    TypeError                                 Traceback (most recent call last)

<ipython-input-28-c4085a31faa3> in <module>()
      5 results = db.session.query(Books).all()
      6 for i in results:
----> 7      if date in i.date:
      8             list1.append(i.title)
      9             list2.append(i.author)

TypeError: argument of type 'datetime.date' is not iterable

【问题讨论】:

  • 请发布完整的回溯消息。
  • 添加了完整的回溯消息
  • 虽然我提供了一个不同方向的解决方案,但这段代码的问题是i 是列表中results 行的迭代器。所以i 代表一个表格行。所以i.date 是一个值,而不是一个数组。

标签: python mysql flask-sqlalchemy


【解决方案1】:

使用sqlachemy filter 进行搜索。在应用程序代码中进行数据库操作的性能相对较差。

results = db.session.query(Books).filter(Books.date==date)

【讨论】:

  • 这很好用。我必须将“date=date”更改为“date==date”,否则会出现错误“SyntaxError:keyword can't be an expression”。由于完全缺乏知识,我不确定您所说的性能不佳是什么意思,但我会接受这个有效的 mvp 并尝试尽我所能来改进它。非常感谢!
  • 语法已更正。数据库是围绕快速搜索和连接数据而设计的。当您需要此功能时,您应该在 sqlalchemy 中寻找支持此功能的机制。如果您的Books 定义包含date 上的索引以支持此查询,那将是理想的。这允许数据库快速获取该行,而不是返回数据并要求您执行搜索(效率低于有很多人长期提高性能的数据库)。
  • 太好了!我会实施的。谢谢你的提示!
猜你喜欢
  • 2019-09-10
  • 2014-05-19
  • 2020-11-26
  • 2020-02-13
  • 2017-09-04
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多