2010-12-01 22 views
3

models.FloatFieldは、MySQLでdoubleを作成します。
倍精度の代わりに浮動小数点精度のフィールドを作成することはできますか?Django:MySQLで倍精度の代わりにfloat precisionを使用する方法

justificationは、SmallIntegerFieldを持つものと同様です。

+0

ここに記載されています。あなたを買うのは何ですか?ディスク容量は安いです。 – duffymo

+0

@duffymo - 私の場合は、数十のフロートカラムと何百万ものエントリがあるので、ダブルからフロートへ移動するとdbサイズが大幅に縮小され、クエリ効率が向上します – Jonathan

+2

まだ簡単です。浮動列の「数十」?エントリの "何百万"?私はそれがあなたが想像している効果を持つだろうとは思っていません。これがそうであると言うデータはどこにありますか?それはコストの価値がないマイクロ最適化です。大規模なデータベースのサイズは、テラバイトです。あなたのものでなければ、もっと生産的な何かをするべきだと言いたい。 – duffymo

答えて

2

これを行うにはいくつかの選択肢がありますが、なぜあなたが望むのか分かりません。

  1. データベースを変更すると、テーブルを再作成するときには機能しませんが、Djangoは手動でキャストしないので、データベースが変更された場合でも結果は変わります。
  2. カスタムFIELDTYPE(すなわちそれはSinglePrecisionFloatFieldのようなものを返すFloatFieldを継承し、get_internal_type()を変更した後、あなたはまた、独自のデータベースバックエンドを作成し、creation.DatabaseCreation.data_typesにカスタムタイプを追加する必要があること(ソースを作成します。http://code.djangoproject.com/browser/django/trunk/django/db/backends/mysql/creation.py
  3. の変更ごとに単精度へFloatField。もし上記のように、独自のデータベースバックエンドを作成し、および/または現在の1でFloatField実装を変更する必要があります。
+0

私の場合、私は数十の浮動列と何百万ものエントリを持っているので、倍精度浮動小数点から浮動小数点数に移動するとdbサイズが大幅に縮小され、クエリ効率が向上する可能性があります – Jonathan

+1

@Jonathan:パフォーマンスに大きな違いはありません)。スペース要件の面では、100万エントリがあると仮定すると、およそ4メガバイトを節約できます;) – Wolph

3

まあそれよりも良い方法とはるかに簡単に1がある。私はまた、私のデータベースで同じことを望んでいたとき、私はf djangoのollowing db_type()メソッド

まず、あなたが

class customFloatField(models.Field): 
    def db_type(self,connection): 
     return 'float' 

は、あなたが、私が試した

number = customFloatField(null=True,blank=True) 

モデルクラスで、他のモデルフィールドとしてこれを使用することができFieldクラスを継承することにより、ジャンゴのカスタムフィールドを作成する必要がありますこれはMySQLでうまく動作します。接続タイプごとに変更するには、ifステートメントで接続設定を確認し、それに応じて変更する必要があります。

この詳細については、https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

関連する問題