sql >> データベース >  >> RDS >> Mysql

空の値を整数フィールドとして保存する方法

    文字列は整数ではありません。空白の文字列はNoneではありません またはNULL 。あなたがする必要があるのは、フィールドが空白であるインスタンスをキャッチし、それをNoneにキャストすることです 。

    foo = "something" # "something" is coming from your CSV file
    
    try:
       val = int(foo)
    except ValueError:
       # foo is something that cannot be converted to
       # a number. It could be an empty string, or a
       # string like 'hello'
       # provide a default value
       val = None
    
    # Now use val to insert into the database
    f = MyModel()
    f.age = val
    f.save()
    

    blank 厳密にはフロントエンド検証用です。データベース側には影響しません:

    null 一方、データベースと関係があります:

    IntegerField 整数に変換できる値が必要なため、空白の文字列を渡すと 、キャストできず、例外が発生します。代わりに、Noneを渡した場合 、age = models.IntegerField(null=True)があります 、それはそれを正しく保存することを知っています。

    要約すると:

    • age = models.IntegerField()

      フィールドは必須であり、有効な整数値が必要です。 Noneは受け入れられません データベースにnull値はありません。有効な値は-2147483648〜2147483647

      です。
    • age = models.IntegerField(null=True)

      フィールドは必須です(フォーム検証)。フィールドにNoneがある場合 値として、NULLに変換されます データベース内。

    • age = models.IntegerField(blank=True, null=True)

      フィールドは必須ではありません(フォーム検証)。フィールドがNoneで渡された場合 、NULLに変換されます

    • age = models.IntegerField(blank=True)

      フィールドは必須ではありませんが(フォーム検証)、データベースはnullを受け入れないため、有効な整数値を渡す必要があります。通常、ここではdefault=0のデフォルト値を指定します または、値をormに送信する前に検証を行ってください。



    1. SQL Serverで連結文字列にセパレータを追加する方法– CONCAT_WS()

    2. SSRSレポート定義はサーバーよりも新しい

    3. ライブラリデータモデル

    4. スノーフレークのCONV()関数