sql >> Databasteknik >  >> RDS >> Mysql

Hur man lagrar tomt värde som ett heltalsfält

En sträng är inte ett heltal; och en tom sträng är inte None eller NULL . Vad du behöver göra är att fånga de fall där fältet är tomt och sedan casta det till 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 är strikt för frontend-validering; det har ingen inverkan på databassidan:

null å andra sidan har att göra med databasen:

Ett IntegerField kräver ett värde som kan konverteras till ett heltal, så när du skickar in en tom sträng , den kan inte kasta den och väcker ett undantag. Istället, om du anger None , och du har age = models.IntegerField(null=True) , det vet att lagra det korrekt.

För att sammanfatta:

  • age = models.IntegerField()

    Fält är obligatoriskt och behöver ett giltigt heltalsvärde. Den accepterar inte None och kommer inte att ha några null-värden i databasen. Giltiga värden är -2147483648 till 2147483647

  • age = models.IntegerField(null=True)

    Fält är obligatoriskt (formulärvalidering). Om fältet har None som ett värde kommer det att översättas till NULL i databasen.

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

    Fält krävs inte (formulärvalidering). Om fältet skickas i None , kommer den att översättas till NULL

  • age = models.IntegerField(blank=True)

    Fält krävs inte (formulärvalidering), men ett giltigt heltalsvärde måste skickas in eftersom databasen inte accepterar null. Vanligtvis här skulle du ge det ett standardvärde med default=0 eller få någon validering utförd innan du skickar in värdet till orm.



  1. Java Oracle-undantag - maximalt antal uttryck i en lista är 1000

  2. Användarinmatningar, rengör och sanera innan du skickar till db

  3. Är pymysql-anslutningstråden säker? Är pymysql markörtråd säker?

  4. Multi-Statement TVFs i Dynamics CRM