Django 过滤器调用返回的列表的默认顺序是什么?

2024-04-06

简短的问题
连接到 PostgreSQL 数据库时,Django 过滤器调用返回的列表的默认顺序是什么?

背景
我自己承认,我had在应用程序层做了一个糟糕的假设,即返回列表的顺序将是恒定的,即不使用“order_by”。我查询的项目列表不按字母顺序或任何其他顺序排列商榷命令。人们认为它保持与添加到数据库中的顺序相同。

这个假设对于数百个查询都是成立的,但是当顺序在不知不觉中发生更改时,我的应用程序报告了失败。据我所知,在这段时间里,这些记录都没有被触及,因为我是唯一维护数据库的人。更令人困惑的是,当在 Mac OS X 上运行 Django 应用程序时,它仍然按预期工作,但在 Win XP 上,它改变了顺序。 (请注意,上述数百个查询是在 Win XP 上进行的)。

对此的任何见解都会有所帮助,因为我在 Django 或 PostgreSQL 文档中找不到任何解释操作系统差异的内容。

调用示例

required_tests = Card_Test.objects.using(get_database()).filter(name__icontains=key)

EDIT
今天与我的一些同事交谈后,我得出了与 Björn Lindqvist 相同的答案。

回想起来,我确实理解为什么这种做法经常犯错。使用 ORM Django、sqlalchemy 或其他工具的好处之一是您可以编写命令,而无需知道或理解(详细)它所连接的数据库。诚然,我恰好是这些用户之一。然而,另一方面,如果不详细了解数据库,调试这样的错误是相当麻烦的,并且可能是灾难性的。


无默认订单,这一点怎么强调都不为过,因为每个人都做错了。

数据库中的表不是普通的 html 表,它是一组无序的元组。它常常让只使用 MySQL 的程序员感到惊讶,因为在该特定数据库中,由于它没有利用一些高级优化技术,行的顺序通常是可预测的。例如,不可能知道将返回哪些行或其在以下任何查询中的顺序:

select * from table limit 10
select * from table limit 10 offset 10
select * from table order by x limit 10

在最后一个查询中,只有当列 x 中的所有值都是唯一的时,顺序才是可预测的。只要满足 select 语句的条件,RDBMS 就可以按其喜欢的任何顺序返回任何行。

尽管您可以在 Django 级别添加默认排序,这会导致它向每个非排序查询添加 order by 子句:

class Table(models.Model):
    ...
    class Meta:
        ordering = ['name']

请注意,如果由于某种原因您不需要有序的行,这可能会拖累性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 过滤器调用返回的列表的默认顺序是什么? 的相关文章

  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 如何加速spark df.write jdbc到postgres数据库?

    我是 Spark 新手 正在尝试使用 df write 加速将数据帧的内容 可以有 200k 到 2M 行 附加到 postgres 数据库 df write format jdbc options url psql url spark d
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐