sql >> Base de Datos >  >> RDS >> Oracle

Problema de Django inspectdb usando la base de datos Oracle

Dos cosas:

  1. Inspectdb no es oficialmente compatible con Oracle (consulte Documentos de Django - inspeccionar base de datos ) tiempos tristes.
  2. Django no tiene un soporte muy sólido para los esquemas de Oracle (consulte ticket de Django 6148 sin resolver ) Así que puede tener mejor suerte si puede conectarse usando el usuario principal para el esquema, haciendo que el esquema que desea introspeccionar sea el esquema predeterminado.

Pude obtener una salida de archivo de modelo básico cambiando la selección en introspection.py. Para mí, cambié la función get_table_list en django/db/backends/oracle/introspection.py (alrededor de la línea 40) de:

def get_table_list(self, cursor):
    "Returns a list of table names in the current database."
    cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
    return [row[0].lower() for row in cursor.fetchall()]

a

def get_table_list(self, cursor):
    "Returns a list of table names in the current database."
    cursor.execute("SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'SCHEMA_TO_QUERY'")
    return [row[0].lower() for row in cursor.fetchall()]

Pero renuncié a django cuando leí el pobre soporte general para esquemas en Oracle