django “ID“: invalid identifier admin界面提示不存在 数据库中却有对应数据

------------------------------------------------------

django.db.utils.DatabaseError: ORA-01502: index 'C##SCOTT.LOGIN_REG_EMAIL_8F7BDDCB_P' or partition of such index is in unusable state

django.db.utils.DatabaseError: ORA-00904: "ID": invalid identifier

ORA-01502: index 'C##SCOTT.LOGIN_REG_EMAIL_8F7BDDCB_P' or partition of such index is in unusable state

ORA-00001: unique constraint (...) violated【https://www.oracle.com/webfolder/community/%E4%B8%AD%E6%96%87%E7%A4%BE%E5%8C%BA/3370770.html

索引c##scott   或这类索引的分区处于不可用状态

django admin界面 ID 为“None”的 person 不存在。可能已经被删除了?【缺失主键?索引不到对应数据提示不存在?】

----------------------------------------------------

今天的问题,我的用户表person,原来可能更改过,现在想以email为主键,

email=models.EmailField(max_length=32,primary_key=True)

,执行报错,①第一个错是索引不可用或者违反唯一约束的问题,【解决办法】自己定位到相关表,我的是person表中ID为主键,然而有些ID为空,把主键列为空的删去或者赋予其他值。

https://www.oracle.com/webfolder/community/%E4%B8%AD%E6%96%87%E7%A4%BE%E5%8C%BA/3370770.html

②"ID": invalid identifier,熟悉的这个错,缺失ID列,我的model里面并没有ID这个属性,但数据库里面必须要存在ID列,添加可解决报错问题,但创建用户时每次都需要去数据库给ID赋值,不治本,html页面是循环model,填写后通过ORM创建到数据库必少一个ID并且还是主键,我尝试过在数据库中将主键改为email,添加managed = false等方法均不行。【解决办法】删除migration中除__init__的所有迁徙文件,更改数据库中的person表(先desc person一下)为person1,根据其属性重建新表person(不要ID这一列,程序model与数据库均指定email为主键。),最后migrations和migrate完成迁徙。

https://docs.djangoproject.com/en/dev/howto/legacy-databases/

https://stackoverflow.com/questions/42012893/django-shell-ora-00904

 

 

#调试用到的数据库命令
drop table login_register_person;
select * from user_tables;
select * from LOGIN_REGISTER_person;

flashback table LOGIN_REGISTER_person to before drop ;

#命令行执行
desc LOGIN_REGISTER_person;

delete from login_register_person where username='dddddd';
update LOGIN_REGISTER_person set id =6 where username='vvvvvv';

alter table LOGIN_REGISTER_person drop column id;
alter table LOGIN_REGISTER_person add(id number);


#查看约束
SELECT * from user_cons_columns c;

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值