0

Django 1.1 を使用して、(MySQL の) varchar 列から最大値を選択しようとしています。列に格納されているデータは次のようになります。

9001
9002
9017
9624
10104
11823

(実際には、これよりもはるかに多くの数字が表示されます。)

これは、数値が 10000 を超えるまで機能しました。

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

現在、同じ行は 11823 ではなく 9624 を返します。

必要なものを提供するクエリを DB で直接実行できますが、Django でこれを行う最善の方法がわかりません。クエリは次のようになります。

select max(sid+0) from Feedback;

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

1

「どんな助けも大歓迎です」という精神で、なぜDjango内で(しかし明らかにMySQL内ではそうではなく)動作を停止したのかを理解する必要があります-10,000で。

生成されているクエリは何ですか? それを見つける方法については、この質問を参照してください。

クエリで並べ替えを数値にするために +0 を追加しているためだと思われます。Django がこれを自然にサポートしているとは思わないので、2 つのオプションがあります。

  • 人々は間違いなく、数値を格納して VARCHAR 列に最大値を求める理由を知りたがるでしょう。列を数値データ型に変更できます。
  • カスタム SQL 呼び出しを行いたいときに、Django がまだそれをサポートしていないときはいつでも、やらなければならないことを行うことができます:独自の raw SQL を記述します
  • 編集: Django にパッチを適用することもできますが、これは MySQL 固有のものである可能性があるため、オプション #2 がおそらく最善の策です。
于 2010-04-17T23:49:01.380 に答える