102

I've been messing around with Django and the Django ORM at home, and I've got to say, I feel it is one of the best out there in terms of ease of use.

However, I was wondering if it was possible to use it in "reverse".

Basically what I would like to do is generate Django models from an existing database schema (from a project that doesn't use django and is pretty old).

Is this possible?

Update: the database in question is Oracle

3 Answers 3

112

Yes, use the inspectdb command:

inspectdb

Introspects the database tables in the database pointed-to by the DATABASE_NAME setting and outputs a Django model module (a models.py file) to standard output.

Use this if you have a legacy database with which you'd like to use Django. The script will inspect the database and create a model for each table within it.

As you might expect, the created models will have an attribute for every field in the table. Note that inspectdb has a few special cases in its field-name output:

[...]

Sign up to request clarification or add additional context in comments.

5 Comments

Reading over that info, it says it is supported for mysql, sqlite, and postgresql. Sadly the database I am trying to use is Oracle :(
oof, I don't believe Django has good support for Oracle at the moment, both forwards or backwards : /
Django has almost all the features one could think of. It still amazes me even after years of use.
I'm not sure but... maybe you should point out that the link refers to the dev version (with more emphasize ?? maybe not..)
is it possible to use same command when new table is inserted
39

(Django 1.7.1) Simply running python manage.py inspectdb will create classes for all tables in database and display on console.

 $ python manage.py inspectdb

Save this as a file by using standard Unix output redirection:

 $ python manage.py inspectdb > models.py

(This works for me with mysql and django 1.9)

Comments

12

I have made a reusable app based on django's inspectdb command utility, Django Inspectdb Refactor.

This breaks models into different files inside models folder from a existing database. This helps managing models when they become large in number.

You can install it via pip:

pip install django-inspectdb-refactor

Then register the app in settings.py as inspectdb_refactor

After this you can use it from command line as :

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

This will successfully create models folder with all the tables as different model files inside your app. For example:

typical structure

More details can be found here.

4 Comments

Add some more description here
python3 manage.py inspectdb_refactor --database=xmldb --app=django_sb_admin Error: Unknown command: 'inspectdb_refactor' Type 'manage.py help' for usage.
did you register this app in your settings.py as inspectdb_refactor ?
I am getting this errror get_meta() missing 1 required positional argument: 'is_partition'. Using django 2.0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.