django自动生成model模型映射表时候发生异常

django自动生成model模型映射表时候发生异常,第1张

在网上看到都是使用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:名称已由现有对象使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9267737.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存