当前位置: 首页 > 面试题库 >

如何将空值存储为Integerfield

赵晟睿
2023-03-14
问题内容

我已经看过所有类似的线程,阅读了文档,并尝试了许多组合来将空值存储IntegerField在db中,并且每次都失败。

我正在使用MySQL。

models.py定义了一个age=models.IntegerField()字段。我从csv文件填充db,并且某些单元格没有值。Django文档说:

Field.null

If True, Django will store empty values as NULL in the database. Default is False.
Note that empty string values will always get stored as empty strings, not as NULL.

由于我正在与IntegerField我一起工作,因此我希望将一个空字符串(csv中的一个空单元格)存储NULL在db中。因此,我(认为)必须添加null=True到该age字段中。实际上,我已经尝试了更多:

age=models.IntegerField()
age=models.IntegerField(null=True)
age=models.IntegerField(null=True, blank=True)
age=models.IntegerField(null=True, blank=True, default=None)

每次我向数据库插入一个空字符串时

ValueError: invalid literal for int() with base 10: ''

猜猜我还能做什么?


问题答案:

字符串不是整数;而空白字符串不是NoneNULL。您需要做的是捕获字段为空的那些实例,然后将其强制转换为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严格用于前端验证;它对数据库方面没有任何影响:

请注意,这与有所不同nullnull与数据库完全相关,而blank与验证相关。如果字段包含blank=True,则表单验证将允许输入一个空值。如果字段包含blank=False,则将需要该字段。

null 另一方面,与数据库有关:

如果为True,则Django将在数据库中将空值存储为NULL。默认值为False。

一个IntegerFieldrequire值可以转换为整数,因此当您传入一个 空白字符串时
,它不能强制转换并引发异常。相反,如果您传入None,并且拥有age = models.IntegerField(null=True),它将知道正确存储它。

总结一下:

  • age = models.IntegerField()

必填字段,并且需要一个有效的整数值。它不会接受,None并且在数据库中将没有空值。有效值为-2147483648至2147483647

  • age = models.IntegerField(null=True)

必填字段(表单验证)。如果该字段具有None值,则将其转换为NULL数据库中的值。

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

字段不是必需的(表单验证)。如果传入该字段None,它将被翻译成NULL

  • age = models.IntegerField(blank=True)

字段不是必需的(表单验证),但是由于数据库不接受空值,因此需要传递有效的整数值。通常,在将值default=0提交给orm之前,您可以在其中使用默认值或进行一些验证。



 类似资料:
  • 卡桑德拉如何在内部存储空值?它是否占用任何存储空间?我正在编写一个应用程序,该应用程序使用具有许多列(100s)的表来表示不同类型的数据,因此列具有诸如“text1”,“text2”,“number1”,“number2”等名称,然后有一个外部JSON架构映射哪个列表示特定数据类型的什么值。因此,对于某种数据类型,许多列可能具有空值,并且我无法找到有关空值将占用的存储空间(如果有)的任何具体信息。

  • 我有一节课 请注意,我已经从equal和hashcode计算中删除了customerId。我创建了这个方法来使用customer对象作为键 下面是遍历Hashmap的方法。 下面是输出。 ==========================================================================================================

  • 我想将用户对当前语言的选择存储到UserDefaults。用户通过选择器选择他们喜欢的语言。然而,我不知道如何放置代码来更新UserDefaults。 下面是我的代码: 然后在我的模型课上: 和选择语言的用户界面: 我如何从UserDefaults加载所选语言并更新用户?

  • 我正在使用Guava缓存热数据。当缓存中不存在数据时,我必须从数据库中获取数据: 我的问题是当数据不存在于数据库中时,我希望它返回并且不做任何缓存。但Guava保存与缓存中的关键字,并抛出一个异常,当我得到它: com.google.common.cache.CacheLoader$InvalidCacheLoadExcION: CacheLoader为shisoft键返回null。 我们如何避免

  • 问题内容: 我有问题来存储的所有值成。这里和是数组的数组。我想将它们的所有值分别存储在和中。的和是字符串的数组。 这是我的尝试,但仅存储每个数组的最后一项。 注意:我已经尝试过了,但是对我不起作用。 问题答案: 为了通用,首先让它成为对象列表 您想要放入对象列表 注意结果列表将包含每个对象,包含的是输入列表。 这种转换将丢失有关哪个对象位于哪个列表中的信息。 您必须遍历。在每个循环中,您都会获得一

  • 本文向大家介绍如何将小端存储模式转为大端存储模式?相关面试题,主要包含被问及如何将小端存储模式转为大端存储模式?时的应答技巧和注意事项,需要的朋友参考一下