在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用。可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了。了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表。
假如在Django存在models如下:
[python] view plain copy
from djangodb import models
# Create your models here
class Sciencenews(modelsModel):
id = modelsCharField(max_length=36,primary_key=True)
first_module = modelsCharField(max_length=30,default="News")
second_module = modelsCharField(max_length=30,default="Latest News")
title = modelsCharField(max_length=300)
author = modelsCharField(max_length=60,null=True)
publish_date = modelsCharField(max_length=35,null=True)
content = modelsTextField(null=True)
crawl_date = modelsCharField(max_length=35,null=True)
from_url = modelsCharField(max_length=350,null=True)
执行数据迁移命令:[python] view plain copy
python managepy makemigration
python managepy migrate
会在数据库中生成名称为show_sciencenews的数据表。show为应用名称,此处我的应用名称为show。可以看到Django创建表的命名规则:应用名_模型名。我的存储爬取到的数据的表格名称原来为science_news,想要Django使用它,而不是创建新的表,只需要把的它的名称改为:应用名_要与该表映射的models名称,在此处我改为show_sciencenews。然后使用如上的数据迁移命令,这时可能会提示数据表已经存在的错误,不用理会,models已经和数据表映射上了。接下来只需要正常使用models和数据表就可以了。
在Synonyms(Oracle数据库,PL/SQL Developer 工具)条目下。 查看是否存在同义词。
有的话将同义词删除就可以了。
ORA-00955: 名称已由现有对象使用 这个错误说的不仅仅是有可能你有存储过程使用了student2,还有可能是你有表名叫student2或者其他oracle对象叫student2。
说明:其实由于你已经使用了create or repalace procedure即使有存储过程叫student2也会被覆盖掉,你用下面的命令查询一下,有什么对象叫student2,删掉它或者换一个存储过程名字。 SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME='STUDENT2';
select aOBJECT_type,a from user_objects a
where aOBJECT_NAME = '设备执行库房'
查下看看,是不是已经有视图或者过程存在。。
创建表时,如果报ORA-00955名称已由现有对象使用
但select时候,又查不到。
还有可能。同义词重名了。
在Synonyms(Oracle数据库,PL/SQL Developer 工具)条目下。 查看是否存在同义词。
有的话将同义词删除就可以了。
否则就是你之前见过这个临时表 test ,或者你这段代码已经执行过至少1次了。
这段代码中没有看到你执行 drop的语句。
这种情况是因为数据库中已经存在同名的存储过程或者其他对象(object)等造成。
解决方法:
1、确定原有名称的存储过程是否有用,如果有用,可为自己的新存储过程重新定义名称。
2、如果确定原有的存储过程无用,在创建新的同名存储过程时可用create or replace 来解决。
如,目前数据库中存在一个叫P_TEST的存储过程,如果确定无用,执行时可按如下方法:
最近在学习oracle的闪回知识(oracle11g),也注意到了这个问题,经初步测试是结果是这样的:
首先确认一下,数据库是否打开了闪回特性:
show parameter recyclebin;
1 下面是 recyclebin = on 的测试情况;
表(test) 表中的列(tid)创建的主键约束 test_pk,表中的列(tage)创建的检查约束test_tage_ck;
不管是 drop table test; 还是 drop table test cascade contraints;
从
select from user_tables where table_name='TEST';
select from recyclebin;
select from user_indexes;
select from user_constraints;
可以看出 表(test)被删除了,表的索引(test_pk)被删除了 --> 放在了回收站 (recyclebin)中了
而且表名和索引名都被系统重命名了
查看 user_constraints 时,发现 主键约束 和 检查约束 还存在,只是被系统重命名了。这种情况下如果 闪回(flashback)表(test),也会同时闪回索引(test_pk),同时 主键约束和检查约束对表(test)有效,只是 索引名、主键约束名、检查约束名都被系统重命名了。
2 下面是 recyclebin=off 的测试情况
alter session set recyclebin=off;
在这种情况下 drop table test;
然后查看
select from user_tables where table_name='TEST';
select from recyclebin;
select from user_indexes;
select from user_constraints;
这些视图表,发现返回结果都为空,即 表、索引、约束等等都被删除了;
希望对你有些许帮助;
select aOBJECT_type,a from user_objects a
where aOBJECT_NAME = '设备执行库房'
查下看看,是不是已经有视图或者过程存在。。
创建表时,如果报ORA-00955名称已由现有对象使用
但select时候,又查不到。
还有可能。同义词重名了。
在Synonyms(Oracle数据库,PL/SQL Developer 工具)条目下。 查看是否存在同义词。
有的话将同义词删除就可以了。
否则就是你之前见过这个临时表 test ,或者你这段代码已经执行过至少1次了。
这段代码中没有看到你执行 drop的语句。
以上就是关于django自动生成model模型映射表时候发生异常全部的内容,包括:django自动生成model模型映射表时候发生异常、oracle提示ORA-00955: 名称已由现有对象使用、oracle 建表 提示 ora-00955:名称已由现有对象使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)