sql >> Databáze >  >> RDS >> Mysql

Jak uložit prázdnou hodnotu jako Integerfield

Řetězec není celé číslo; a prázdný řetězec není None nebo NULL . Co musíte udělat, je zachytit ty případy, kdy je pole prázdné, a poté je přenést na 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 je výhradně pro ověření frontendu; nemá to žádný dopad na stranu databáze:

null na druhou stranu má co do činění s databází:

IntegerField vyžaduje hodnotu, kterou lze převést na celé číslo, takže když předáte prázdný řetězec , nemůže jej přenést a vyvolá výjimku. Místo toho, pokud předáte None a máte age = models.IntegerField(null=True) , ví to správně uložit.

Abych to shrnul:

  • age = models.IntegerField()

    Pole je povinné a potřebuje platnou celočíselnou hodnotu. Nepřijme None a nebude mít v databázi žádné hodnoty null. Platné hodnoty jsou -2147483648 až 2147483647

  • age = models.IntegerField(null=True)

    Pole je povinné (ověření formuláře). Pokud má pole None jako hodnota bude přeložena na NULL v databázi.

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

    Pole není povinné (ověření formuláře). Pokud je pole předáno v None , bude přeložen na NULL

  • age = models.IntegerField(blank=True)

    Pole není povinné (ověření formuláře), ale je třeba zadat platnou celočíselnou hodnotu, protože databáze nepřijímá hodnotu null. Zde byste mu obvykle dali výchozí hodnotu s default=0 nebo si před odesláním hodnoty do orm nechejte provést nějaké ověření.



  1. Co je ODBC?

  2. Příkaz UPDATE byl v konfliktu s omezením REFERENCE - SQL Server / TSQL výukový program, část 76

  3. Rozdíl mezi GiST a GIN indexem

  4. Proč potřebujeme zprostředkovatele zpráv jako RabbitMQ přes databázi jako PostgreSQL?