Django从MySQL中选择varchar字段的最大值

0 投票
1 回答
1408 浏览
提问于 2025-04-15 21:44

我在使用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;

如果能得到一些帮助,我会非常感激。

谢谢!

1 个回答

1

为了帮助你解决问题,首先你需要弄清楚为什么在Django中它停止工作了(但在MySQL中似乎没问题)——这个问题出现在10,000的时候。

你生成的查询是什么?可以查看这个问题,了解如何找到这个信息。

我怀疑问题出在你在查询中加了+0来让排序变成数字排序。我觉得Django本身不支持这种做法,所以你有两个选择:

  • 大家肯定会想知道,你为什么要在一个VARCHAR列中存储数字并请求它的最大值。你可以把这个列改成数字类型
  • 你可以在Django还不支持的情况下,像往常一样进行自定义SQL调用:自己写原始SQL
  • 补充一下:你也可以尝试修改Django,但这可能是MySQL特有的问题,所以第二个选项可能是最好的选择。

撰写回答