Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So speichern Sie einen leeren Wert als Integerfield

Ein String ist keine Ganzzahl; und ein leerer String ist nicht None oder NULL . Sie müssen nur die Fälle abfangen, in denen das Feld leer ist, und es dann in None umwandeln .

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 dient ausschließlich der Front-End-Validierung; es hat keine Auswirkung auf die Datenbankseite:

null hat andererseits mit der Datenbank zu tun:

Ein IntegerField erfordert einen Wert, der in eine Ganzzahl konvertiert werden kann, also wenn Sie eine leere Zeichenfolge übergeben , kann es nicht umgewandelt werden und löst eine Ausnahme aus. Stattdessen, wenn Sie None übergeben , und Sie haben age = models.IntegerField(null=True) , weiß es, es richtig zu speichern.

Zusammenfassend:

  • age = models.IntegerField()

    Das Feld ist erforderlich und benötigt einen gültigen ganzzahligen Wert. None wird nicht akzeptiert und hat keine Nullwerte in der Datenbank. Gültige Werte sind -2147483648 bis 2147483647

  • age = models.IntegerField(null=True)

    Feld ist erforderlich (Formularvalidierung). Wenn das Feld None hat als Wert wird er in NULL übersetzt in der Datenbank.

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

    Feld ist nicht erforderlich (Formularvalidierung). Wenn das Feld in None übergeben wird , wird es in NULL übersetzt

  • age = models.IntegerField(blank=True)

    Das Feld ist nicht erforderlich (Formularvalidierung), aber es muss ein gültiger ganzzahliger Wert übergeben werden, da die Datenbank keine Null akzeptiert. Normalerweise würden Sie ihm hier einen Standardwert mit default=0 geben oder lassen Sie eine Validierung durchführen, bevor Sie den Wert an das Orm senden.