无法使用Django oracle12c在数据库中创建表

时间:2018-09-29 07:58:21

标签: django python-3.x oracle django-models oracle12c

我正在一个大学项目中,我应该使用oracle数据库作为后端,并且我选择使用django作为编程语言。 我已成功将django与oracle 12c连接,并且还安装了cx_Oracle。但是当我尝试运行命令

py manage.py migrate

出现以下错误。

  

Windows PowerShell版权所有(C)Microsoft Corporation。保留所有权利   保留。

     

PS C:\ Users \ Hp \ Desktop \ onlinepharma> py manage.py migration
  要执行的操作:       应用所有迁移:管理,身份验证,内容类型,会话,测试正在运行的迁移:应用contenttypes.0001_initial ... Traceback   (最近通话最近):文件   “ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-
  _execute中的packages \ django \ db \ backends \ utils.py“,第83行       返回self.cursor.execute(sql)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ oracle \ base.py”,   第513行,执行       返回self.cursor.execute(query,self._param_generator(params))cx_Oracle.DatabaseError:ORA-00955:名称已经被   现有对象

     

上述异常是以下异常的直接原因:

     

回溯(最近一次通话最后一次):文件“ manage.py”,第15行,在          execute_from_command_line(sys.argv)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ management__init __。py”,   第381行,在execute_from_command_line中       utility.execute()文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ management__init __。py”,   行375,在执行       self.fetch_command(subcommand).run_from_argv(self.argv)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ management \ base.py”,   第316行,位于run_from_argv中       self.execute(* args,** cmd_options)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ management \ base.py”,   第353行,在执行中       输出= self.handle(* args,** options)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ management \ base.py”,   第83行,缠绕       res = handle_func(* args,** kwargs)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ management \ commands \ migrate.py”,   第203行,在句柄中       fake_initial = fake_initial,文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ migrations \ executor.py”,   第117行,正在迁移       状态= self._migrate_all_forwards(状态,计划,完整计划,fake = fake,fake_initial = fake_initial)文件   “ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ migrations \ executor.py”,   _migrate_all_forwards中的第147行       状态= self.apply_migration(状态,迁移,fake = fake,fake_initial = fake_initial)文件   “ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ migrations \ executor.py”,   第244行,位于apply_migration中       状态= migration.apply(状态,模式编辑器)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ migrations \ migration.py”,   第124行,适用       operation.database_forwards(self.app_label,schema_editor,old_state,project_state)文件   “ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ migrations \ operations \ models.py”,   第91行,在database_forwards中       schema_editor.create_model(model)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ base \ schema.py”,   create_model中的第312行       self.execute(sql,params或None)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ base \ schema.py”,   第133行,在执行中       cursor.execute(sql,params)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ utils.py”,   第100行,在执行中       返回super()。execute(sql,params)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ utils.py”,   第68行,执行       返回self._execute_with_wrappers(sql,params,many = False,executor = self._execute)文件   “ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ utils.py”,   第77行,在_execute_with_wrappers中       返回执行程序(sql,params,许多,上下文)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ utils.py”,   _execute中的第85行       返回self.cursor.execute(sql,params)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ utils.py”,   第89行,退出       从exc_value文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ utils.py”中提高dj_exc_value.with_traceback(traceback),   _execute中的第83行       返回self.cursor.execute(sql)文件“ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ oracle \ base.py”,   第513行,执行       返回self.cursor.execute(query,self._param_generator(params))django.db.utils.DatabaseError:ORA-00955:名称已被   现有对象

这是我的model.py文件

from django.db import models

# Create your models here.
class yoman(models.Model):
text=models.CharField(max_length=200)

但是我已经使用sql命令行进行了检查,并且不存在这样的数据库表或视图。

p.s:makemigrations命令正常运行,并且还创建了migratiosn文件。

1 个答案:

答案 0 :(得分:1)

如果编辑以下文件,则可以打印出sql查询: “ C:\ Users \ Hp \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ oracle \ base.py 在513行上,在调用execute函数之前,添加:

print(f'query')

重新运行迁移,您会看到运行失败的sql。删除或重命名数据库中的表/对象。