当列为varchar时,django从mysql中选择最大字段

发布于 2024-08-29 03:18:11 字数 466 浏览 8 评论 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;

任何帮助将不胜感激。

谢谢!

Using Django 1.1, I am trying to select the maximum value from a varchar column (in MySQL.) The data stored in the column looks like:

9001
9002
9017
9624
10104
11823

(In reality, the numbers are much bigger than this.)

This worked until the numbers incremented above 10000:

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

Now, that same line would return 9624 instead of 11823.

I'm able to run a query directly in the DB that gives me what I need, but I can't figure out the best way to do this in Django. The query would be:

select max(sid+0) from Feedback;

Any help would be much appreciated.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零崎曲识 2024-09-05 03:18:11

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

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

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

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

In the spirit of "any help would be much appreciated", you should figure out why it stopped working inside Django (but apparently not inside MySQL) - at 10,000.

What is the query that is being generated? See this question for how to find that out.

I suspect it is because you're adding the +0 to make the sort numeric in your query. I don't think Django supports this naturally, so you have two options:

  • People will undoubtedly want to know why you're storing a number and asking for the maximum of it in a VARCHAR column. You could change the column to a numeric data type.
  • You could do what you have to do whenever you want to make some custom SQL call and Django doesn't yet support it: write your own raw SQL.
  • Edit: You could also patch Django, but this might be a MySQL specific thing, so option #2 is probably your best bet.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文