1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- ==============================================
- How to integrate Django with a legacy database
- ==============================================
- While Django is best suited for developing new applications, it's quite
- possible to integrate it into legacy databases. Django includes a couple of
- utilities to automate as much of this process as possible.
- This document assumes you know the Django basics, as covered in the
- :doc:`tutorial </intro/tutorial01>`.
- Once you've got Django set up, you'll follow this general process to integrate
- with an existing database.
- Give Django your database parameters
- ====================================
- You'll need to tell Django what your database connection parameters are, and
- what the name of the database is. Do that by editing the :setting:`DATABASES`
- setting and assigning values to the following keys for the ``'default'``
- connection:
- * :setting:`NAME`
- * :setting:`ENGINE <DATABASE-ENGINE>`
- * :setting:`USER`
- * :setting:`PASSWORD`
- * :setting:`HOST`
- * :setting:`PORT`
- Auto-generate the models
- ========================
- Django comes with a utility called :djadmin:`inspectdb` that can create models
- by introspecting an existing database. You can view the output by running this
- command:
- .. code-block:: shell
- $ python manage.py inspectdb
- Save this as a file by using standard Unix output redirection:
- .. code-block:: shell
- $ python manage.py inspectdb > models.py
- This feature is meant as a shortcut, not as definitive model generation. See the
- :djadmin:`documentation of inspectdb <inspectdb>` for more information.
- Once you've cleaned up your models, name the file ``models.py`` and put it in
- the Python package that holds your app. Then add the app to your
- :setting:`INSTALLED_APPS` setting.
- By default, :djadmin:`inspectdb` creates unmanaged models. That is,
- ``managed = False`` in the model's ``Meta`` class tells Django not to manage
- each table's creation, modification, and deletion::
- class Person(models.Model):
- id = models.IntegerField(primary_key=True)
- first_name = models.CharField(max_length=70)
- class Meta:
- managed = False
- db_table = "CENSUS_PERSONS"
- If you do want to allow Django to manage the table's lifecycle, you'll need to
- change the :attr:`~django.db.models.Options.managed` option above to ``True``
- (or remove it because ``True`` is its default value).
- Install the core Django tables
- ==============================
- Next, run the :djadmin:`migrate` command to install any extra needed database
- records such as admin permissions and content types:
- .. code-block:: shell
- $ python manage.py migrate
- Test and tweak
- ==============
- Those are the basic steps -- from here you'll want to tweak the models Django
- generated until they work the way you'd like. Try accessing your data via the
- Django database API, and try editing objects via Django's admin site, and edit
- the models file accordingly.
|