sql >> Database teknologi >  >> RDS >> Mysql

Sådan gemmer du tom værdi som et heltalsfelt

En streng er ikke et heltal; og en tom streng er ikke None eller NULL . Det, du skal gøre, er at fange de tilfælde, hvor feltet er tomt, og derefter caste det til 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 er udelukkende til frontend-validering; det har ingen indflydelse på databasesiden:

null på den anden side har det at gøre med databasen:

Et IntegerField kræver værdi, der kan konverteres til et heltal, så når du sender en tom streng , den kan ikke kaste den og rejser en undtagelse. Hvis du i stedet indtaster None , og du har age = models.IntegerField(null=True) , den ved at opbevare den korrekt.

For at opsummere:

  • age = models.IntegerField()

    Feltet er påkrævet og kræver en gyldig heltalsværdi. Den accepterer ikke None og har ingen null-værdier i databasen. Gyldige værdier er -2147483648 til 2147483647

  • age = models.IntegerField(null=True)

    Feltet er påkrævet (formularvalidering). Hvis feltet har None som en værdi vil den blive oversat til NULL i databasen.

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

    Feltet er ikke påkrævet (formularvalidering). Hvis feltet sendes i None , vil det blive oversat til NULL

  • age = models.IntegerField(blank=True)

    Feltet er ikke påkrævet (formularvalidering), men en gyldig heltalsværdi skal indsendes, fordi databasen ikke accepterer null. Typisk vil du her give den en standardværdi med default=0 eller få foretaget en validering, før du sender værdien til orm.



  1. MySQL GRUPPE VED...AT HAVE forskellige værdier samme felt

  2. #1062 - Dublet indtastning for nøgle 'PRIMÆR'

  3. PDO forbindelsesfejl ved brug af symfony og MAMP

  4. Hvordan kan jeg afslutte et asynkront opkald for at opføre sig synkront?