【问题标题】:Django paginator not responsive on last pageDjango分页器在最后一页没有响应
【发布时间】:2019-11-29 17:39:09
【问题描述】:

在 Django 2.0 中迭代大型 QuerySet 似乎不再是一个可行的选择。 我尝试使用 Django 自己的 Paginator 来加速它。

def read_from_db_4():
    paginator = Paginator(DataSet.objects.filter(status_id=1).order_by('id'), 1000)
    l = []
    print("{} iterations!".format(paginator.num_pages))
    for page in range(1, paginator.num_pages+1):
        l = l + list(paginator.page(page).object_list)
        print("{}, next page...".format(page))
    return l

这个小功能相当快,但会在最后一页停止。

我也无法到达此页面的长度:

len(paginator.page(LASTPAGE).object_list)

这将永远挂起。 我以前可以得到所有其他页面的长度。

这种奇怪行为的原因是什么?

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    好的,我发现问题出在 Python MySQL 驱动程序上。

    我没有使用Django recommended mysqlclient。 我使用的是Oracle/MySQL 创建的那个。似乎有一个错误导致迭代器“卡”在 for 循环中的 QuerySet 的最后一个元素上,并在某些情况下陷入无限循环。

    我发现的方法是让迭代器正常运行并在它到达 QuerySet 中的最后一个元素时退出循环,例如,通过对其使用 .iterator() 方法。但是,对于我的用例来说,这不是一个选项。

    安装mysqlclient 为我解决了这个问题。请注意,当您使用 Mac 时,您还需要遵循“关于 MySQL Connector/C 在 macOS 上的错误的注意事项”部分。

    您可以在文件夹/usr/local/mysql/bin 中找到mysql_config。最初我有点被推迟了,因为指南让你搜索文件,我花了很长时间才找到它,看到搜索“mysql_config”会为你提供几十个关于在哪里找到@的结果987654329@.

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2013-10-29
      • 2017-12-21
      • 1970-01-01
      相关资源
      最近更新 更多