0

使用 Django 1.1,我试图从 varchar 列(在 MySQL 中)中选择最大值。存储在列中的数据如下所示:

9001
9002
9017
9624
10104
11823

(实际上,数字比这大得多。)

这一直有效,直到数字增加到 10000 以上:

Feedback.objects.filter(est__pk=est_id).aggregate(sid=Max('sid'))

现在,同一行将返回 9624 而不是 11823。

我可以直接在数据库中运行一个查询,这给了我我需要的东西,但我无法找出在 Django 中执行此操作的最佳方法。查询将是:

select max(sid+0) from Feedback;

任何帮助将非常感激。

谢谢!

4

1 回答 1

1

本着“任何帮助将不胜感激”的精神,您应该弄清楚为什么它停止在 Django 内部工作(但显然不在 MySQL 内部) - 在 10,000。

正在生成的查询是什么?请参阅此问题以了解如何找出答案。

我怀疑这是因为您要添加 +0 以在查询中进行排序数字。我不认为 Django 自然支持这一点,所以你有两个选择:

  • 人们无疑会想知道为什么要存储一个数字并在 VARCHAR 列中要求它的最大值。您可以将列更改为数字数据类型
  • 每当您想进行一些自定义 SQL 调用而 Django还不支持它时,您可以做您必须做的事情:编写您自己的原始 SQL
  • 编辑:您也可以修补 Django,但这可能是 MySQL 特定的东西,所以选项 #2 可能是您最好的选择。
于 2010-04-17T23:49:01.380 回答