【问题】django.db.utils.DatabaseError: ORA-00955: name is already used by an existing object。。。模型迁徙python manage migrate时遇到这个问题
【解决办法】 提示错误消息
File "D:\install\anaconda\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
return self.cursor.execute(sql)
File "D:\install\anaconda\lib\site-packages\django\db\backends\oracle\base.py", line 534, in execute
return self.cursor.execute(query, self._param_generator(params))
既然报数据库报错就定位到上面的utils.py文件,把sql语句print出来。print出来如下语句
SELECT table_name, 't'
FROM user_tables
WHERE
NOT EXISTS (
SELECT 1
FROM user_mviews
WHERE user_mviews.mview_name = user_tables.table_name
)
UNION ALL
SELECT view_name, 'v' FROM user_views
UNION ALL
SELECT mview_name, 'v' FROM user_mviews
去看一下语句的表user_tables,user_views,user_mviews,其中user_table有个login_register_product,可能就是这个表中的这条数据exist了,我就想删除表中的这一行,然后直接删和进system删都遇到问题,sysdba赋了权限也一样
ORA-02030: 只能从固定的表/视图查询
sqlplus/nolog
conn/as sysdba
grant delete on user_tables to c##scott;
delete from user_tables where table_name=LOGIN_REGISTER_PRODUCT;
drop table LOGIN_REGISTER_PRODUCT;
问了一下同事说这是系统表,不能修改,它存在这个条目是因为数据库中存在login_register_product命名的表,drop掉login_register_product再运行python manage migrate就可以。