如何在oracle中针对不同的模式运行inspectdb?

And*_*ndy 5 oracle django inspectdb

我想对Oracle数据库运行inspectdb.我使用的用户帐户是拥有0个表的只读用户.但是,它可以访问包含所有表的模式.使用时如何指定架构inspectdb

我目前的命令是: python manage.py inspectdb --database "oradb" > test_model.py

这只输出一个文件from django.db import models.

And*_*ndy 4

关于 Oracle 支持,C\xc3\xa9sar\ 的答案是正确的。然而,我能够通过修改django\\db\\backends\\oracle\\introspection.py两个地方来生成一个粗略的模型。

\n\n

cursor.execute将行更改get_table_list为:

\n\n
cursor.execute("SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = \'OTHERSCHEMA\'")\n
Run Code Online (Sandbox Code Playgroud)\n\n

user_table_colsALL_TAB_COLUMNS第一cursor.execute行中的改为get_table_description

\n\n
cursor.execute("""\n        SELECT\n            column_name,\n            data_default,\n            CASE\n                WHEN char_used IS NULL THEN data_length\n                ELSE char_length\n            END as internal_size\n        FROM ALL_TAB_COLUMNS\n        WHERE table_name = UPPER(%s)""", [table_name])\n
Run Code Online (Sandbox Code Playgroud)\n\n

接下来,将第二cursor.execute行更改get_table_description为:cursor.execute("SELECT * FROM OTHERSCHEMA.%s WHERE ROWNUM < 2" % self.connection.ops.quote_name(table_name))

\n\n

由于这是一个遗留数据库,其中策略阻止对数据库进行更改,因此这对于一次性运行来说是很好的。

\n\n

模型完成后还需要进行一些更改。我的一些课程似乎缺少主键引用和外键引用。我将手动添加这些。

\n\n

我所做的最后一个更改是修改所有实例class Meta:以引用正确的架构:

\n\n
class Meta:\n    db_table = u\'"SCHEMA"."TABLE_NAME"\'     # Notice the quoting needed\n
Run Code Online (Sandbox Code Playgroud)\n