Short Question

Background

这一假设适用于数百个查询,但是当顺序在不知情的情况下更改时,我的应用程序报告了一个失败.据我所知,在这段时间里,这些记录都没有被碰过,因为我是唯一维护数据库的人.为了增加念力的功能,在MacOSX上运行Django应用程序时,它仍然可以像预期的那样工作,但在Win XP上,它改变了顺序.(请注意,上面提到的数百个查询是在Win XP上进行的).

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

Example Call

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

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

回过头来看,我绝对理解为什么这件事经常做得不对.使用ORM Django、sqlalChemy或任何其他工具的好处之一是,您可以编写命令,而不必知道或(详细)了解它所连接的数据库.诚然,我碰巧就是这些用户中的一员.然而,另一方面,在不详细了解数据库的情况下,调试这样的错误是相当麻烦的,并且可能是灾难性的.

推荐答案

NO DEFAULT ORDER个,这一点怎么强调都不够,因 for each 人都做错事了.

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

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']

请注意,如果出于某种原因您不需要有序的行,这可能是一个性能阻力.

Django相关问答推荐

Django Signals:从实例访问ManyToManyRel值

Django迁移嵌套模型时出错,不带迁移基本模型

我无法在Django模板中使用Get_Foo_Display

Django-表单(ModelForm)中的数据不保存在现有数据库中

如何在 Django 中设置与 Session 相关的字段

Django: 无法将我的 comments 关联到特定产品

在 Django 中处理信用卡付款的最佳 Select 是什么?

在 PyCharm 中运行 Django 测试

使用基于类的 UpdateView 在 Django 中更新用户模型

可插拔应用程序的Django默认设置约定?

如何在 Django 视图中获取 URL 参数?

NoReverseMatch 错误

magic有什么问题?

Django:使用 ModelForm 编辑现有数据库条目

ImportError:升级到 Django 4.0 后无法从 'django.conf.urls' 导入名称 'url'

get_or_create() 线程安全吗

使用 get_object_or_404 获取数据库值

Django 自定义用户邮箱帐户验证

如何在 Django 中使用动态外键?

Heroku & Django:OSError: No such file or directory:'/app/{myappname}/static'