Davide Targa website

Programming, web development and open source

Django: Inspectdb Con Oracle

Django è in grado di generare in modo automatico il file dei model (models.py) per mezzo dello script manage.py. Purtroppo il comando sembra non funzionare correttamente con i database Oracle. Ho risolto questo problema andando a modificare una piccola parte del codice di django.

Supponendo di avere una installazione di django effettuata su un virtualenv, andiamo nella directory principale del progetto e editiamo il file introspection.py con il comando:

1
vi ./lib/python2.7/site-packages/django/db/backends/oracle/introspection.py

cerchiamo quindi il metodo get_table_list nella classe DatabaseIntrospection:

1
2
3
4
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()]

Modifichiamo quindi il metodo come segue:

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

Ho commentato la riga originale in modo tale di poter annullare facilmente la modifica a cose fatte. Possiamo lanciare ora il comando di inspectdb

1
python manage.py inspectdb

che a questo punto dovrebbe funzionare correttamente. Una volta completata la generazione dei model ricordiamoci di annullare la modifica apportata sul codice ripristinando la riga originaria.

Comments