You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL列类型与Django模型值不匹配及字段类型一致性问询

问题详情
  1. 定义如下Django模型类:
class Person(models.Model):
    # ...
    spending = models.BigIntegerField(blank=True, null=True)
    # ...

通过以下方式填充数据:

p = Person(
    # ...
    spending = str(row['spending'])
    # ...
)
p.save()

其中row是pandas DataFrame的行,请问数据库中该字段的类型是什么?

  1. 若字段定义为TextField,而插入的是int(row['spending']),结果又会如何?

  2. 当列包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:33:14