Django执行makemigrations时出现UndefinedColumn错误求助
错误原因分析
核心问题:数据库适配器与CockroachDB版本不兼容
从报错栈能明确看到,django_cockroachdb的内省模块(introspection.py)执行了这条SQL语句:SELECT table_name, type FROM [SHOW TABLES]但你当前使用的CockroachDB版本中,
SHOW TABLES返回的结果集里并没有名为type的列(较新的CockroachDB版本该列名为table_type),因此触发column "type" does not exist错误。为什么makemigrations会操作数据库?
makemigrations命令并非完全不接触数据库,它在生成迁移文件前会检查数据库的迁移历史一致性,这一步需要通过数据库内省获取现有表列表(包括Django自带的迁移记录表django_migrations),因此会发起数据库查询。版本匹配问题
你使用的Django 3.2.12需要搭配适配的django-cockroachdb版本,同时还要与CockroachDB版本兼容:- 若CockroachDB版本为v22.1及以上,适配Django 3.2的早期
django-cockroachdb版本未同步更新SQL查询语句,导致列名不匹配。 - 新建CockroachDB实例仍报错,说明是适配器与数据库版本的全局不兼容,而非单个项目的局部问题。
- 若CockroachDB版本为v22.1及以上,适配Django 3.2的早期
内容的提问来源于stack exchange,提问作者azteker
相关产品推荐
相关产品推荐

