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

重写Django模型移除冗余主键后出现InvalidCursorName错误如何修复

问题成因

报错的根本原因是数据库表结构和Django模型定义不匹配:
你删除本地迁移文件的操作仅清理了本地的迁移记录,既没有修改数据库中已存在的旧表结构,也没有删除Django内置django_migrations表中存储的历史迁移执行记录。你修改模型移除硬编码主键后,新生成的迁移逻辑和数据库里的旧表结构无法对应:Django默认会找模型的id字段作为主键查询,但Nome_Popular对应的旧数据库表的主键还是你之前硬编码的其他字段,所以触发column app_species_catalog_nome_popular.id does not exist报错,后续的游标不存在报错是该异常触发的连锁反应。
另外注意你当前贴出的Arvore模型中,nome_cientifico字段仍然保留了primary_key=True的硬编码主键设置,如果确实要统一移除自定义主键需要同步修改。

解决步骤

操作前先完整备份你的PostgreSQL数据库,避免数据丢失:

  • 清理本地迁移文件:删除你应用下migrations文件夹中除__init__.py之外的所有文件
  • 清理数据库中的迁移记录:连接到PostgreSQL数据库,执行SQL语句删除对应应用的历史迁移记录
DELETE FROM django_migrations WHERE app = '你的应用名称';

将语句中的你的应用名称替换为你自己的应用名,参考报错前缀应为species_catalog

  • 清理数据库中的旧表:执行SQL删除该应用对应的所有旧表,级联删除会同步清理关联的约束、中间表
DROP TABLE IF EXISTS app_species_catalog_nome_popular CASCADE;
DROP TABLE IF EXISTS app_species_catalog_arvore CASCADE;
DROP TABLE IF EXISTS app_species_catalog_img_arvore CASCADE;
-- 其他该应用的模型对应的表也按上述格式一并删除
  • 检查所有模型定义:确认包括Nome_Popular、Taxonomia、Biotipo等在内的所有关联模型,要么明确设置了主键字段,要么没有自定义主键由Django自动生成id主键
  • 重新生成并执行迁移:
python manage.py makemigrations 你的应用名称
python manage.py migrate

操作完成后再进入Django admin后台测试添加数据即可恢复正常。

内容的提问来源于stack exchange,提问作者Fernando Soares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:48:02