Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przechowywać pustą wartość jako pole całkowite?

Łańcuch nie jest liczbą całkowitą; a pusty ciąg nie jest None lub NULL . Musisz złapać te instancje, w których pole jest puste, a następnie rzutować je 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 służy wyłącznie do sprawdzania poprawności front-endu; nie ma to żadnego wpływu na stronę bazy danych:

null z drugiej strony ma do czynienia z bazą danych:

IntegerField wymaga wartości, którą można przekonwertować na liczbę całkowitą, więc gdy przekazujesz pusty ciąg , nie może go rzutować i zgłasza wyjątek. Zamiast tego, jeśli zdasz None , i masz age = models.IntegerField(null=True) , wie, jak prawidłowo go przechowywać.

Podsumowując:

  • age = models.IntegerField()

    Pole jest wymagane i wymaga prawidłowej liczby całkowitej. Nie zaakceptuje None i nie będzie zawierał wartości null w bazie danych. Prawidłowe wartości to od -2147483648 do 2147483647

  • age = models.IntegerField(null=True)

    Pole jest wymagane (walidacja formularza). Jeśli pole zawiera None jako wartość zostanie przetłumaczona na NULL w bazie danych.

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

    Pole nie jest wymagane (walidacja formularza). Jeśli pole jest przekazywane w None , zostanie przetłumaczony na NULL

  • age = models.IntegerField(blank=True)

    Pole nie jest wymagane (walidacja formularza), ale należy podać prawidłową liczbę całkowitą, ponieważ baza danych nie akceptuje wartości null. Zazwyczaj tutaj podajesz mu domyślną wartość z default=0 lub zlecić weryfikację przed przesłaniem wartości do formularza.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL otrzymuje losową wartość między dwiema wartościami

  2. Wdrażanie twittera i facebooka jak hashtagi

  3. ap_pass_brigade nie powiodło się w funkcji handle_request_ipc

  4. Jak odbudować niespójny serwer MySQL Slave?

  5. Znacznik czasu bez zmian podczas aktualizacji