MySQL列类型与Django模型值不匹配及字段类型一致性问询
问题详情
- 定义如下Django模型类:
class Person(models.Model): # ... spending = models.BigIntegerField(blank=True, null=True) # ...
通过以下方式填充数据:
p = Person( # ... spending = str(row['spending']) # ... ) p.save()
其中row是pandas DataFrame的行,请问数据库中该字段的类型是什么?
若字段定义为
TextField,而插入的是int(row['spending']),结果又会如何?当列包含null值时,比如字段为数值类型,插入null值后,它会保持数值类型还是转为文本类型以容纳null值?
解答
- 第一个问题:数据库中
spending字段的类型仍是数值类型(对应MySQL的BIGINT)。Django的ORM会自动做类型转换,你传入字符串形式的数字,ORM会将其转为整数后存入数据库,不会改变字段本身的类型定义。 - 第二个问题:如果字段定义为
TextField,插入整数类型的值,数据库中该字段会是文本类型(对应MySQL的LONGTEXT)。Django ORM会把整数转为字符串后存入,字段类型依然遵循模型定义的TextField,不会因为插入值的类型改变。 - 第三个问题:即使字段包含null值,字段类型依然保持原定义的数值类型。null值是数值类型列的合法取值(只要模型里设置了
null=True),数据库不会为了容纳null值把数值类型转为文本类型,null本身就是数值类型列支持的特殊值。
内容的提问来源于stack exchange,提问作者Goh-shans
相关产品推荐
相关产品推荐

