当列是varchar时,django从mysql中选择max field

时间:2010-04-17 23:33:29

标签: python django mysql max varchar

使用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.

我可以直接在DB中运行查询,它可以提供我需要的东西,但我无法找到在Django中执行此操作的最佳方法。查询将是:

select max(sid+0) from Feedback;

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

本着“任何帮助都会受到高度赞赏”的精神,你应该弄明白为什么它停止在Django内部工作(但显然不在MySQL内部) - 万分之一。

正在生成的查询是什么?请参阅this question了解如何找到它。

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

  • 毫无疑问,人们会想知道为什么要存储一个数字并在VARCHAR列中要求它的最大值。您可以将列更改为numeric data type
  • 只要你想进行一些自定义SQL调用而Django 尚未支持它,你就可以做你必须做的事情:write your own raw SQL
  • 编辑:你也可以修补Django,但这可能是MySQL特有的东西,所以选项#2可能是你最好的选择。