Джанго без дополнительных таблиц? - PullRequest
1 голос
/ 21 августа 2009

возможно ли писать приложения Django, например, для внутреннего / личного использования с существующими базами данных, не имея «накладных расходов» на собственные таблицы Djangos, которые обычно устанавливаются при запуске проекта? Я хотел бы использовать существующие таблицы с помощью моделей, но не иметь всего прочего, что, безусловно, полезно на обычных веб-страницах.

Причина может заключаться в создании небольших инструментов личного досмотра / администрирования без необходимости вмешательства в устаревшие базы данных.

Ответы [ 5 ]

3 голосов
/ 21 августа 2009

Django не устанавливает никаких таблиц самостоятельно. Он поставляется с некоторыми готовыми приложениями, которые устанавливают таблицы, но их легко отключить, удалив их из параметра INSTALLED_APPS.

2 голосов
/ 06 июля 2010

Вы также можете просто добавить дополнительную базу данных (установите ее по умолчанию) для хранения дополнительных служебных данных django в:

DATABASES = {
     'default': {
            'ENGINE'    : 'django.db.backends.sqlite',
            'NAME'      : 'djangoOverhead',
            'USER'      : '',
            'PASSWORD'  : '',
            'HOST'      : 'localhost' },
     'legacyAppTables': {
            'ENGINE'    : 'django.db.backends.mysql',
            'NAME'      : 'legacyAppTables',
            'USER'      : '',
            'PASSWORD'  : '',
            'HOST'      : 'someRemoteHost' }, }
1 голос
/ 21 августа 2009

Самым заметным приложением с определенными таблицами базы данных является django.contrib.auth, которое реализует собственный аутентификационный бэкэнд в базе данных. Вероятно, вы могли бы пропустить авторизацию все вместе, если ваше приложение защищено брандмауэром и вы доверяете всем людям, которые имеют к нему доступ. Если в противном случае вы хотите создать свой собственный механизм аутентификации с использованием существующей инфраструктуры, вы, скорее всего, захотите использовать другой бэкэнд. Если ваш веб-сервер устанавливает REMOTE_USER, вы можете использовать другой встроенный бэкэнд , и вы должны быть выключены и работать. В противном случае вам придется реализовать свой собственный, чтобы ссылаться на другие источники аутентификации.

Оттуда вам нужно только настроить свои модели на использование существующих таблиц базы данных, а не позволять им создавать свои собственные. Вы можете очень хорошо контролировать это, например

class MyModel(django.db.Model):
    MyTextField = django.db.TextField(db_column="mytextfield", primary_key=True)

    class Meta:
        db_table = "my_table"

Таким образом, вы можете указать точную таблицу и столбцы, из которых будет представлено каждое поле каждой модели. Обратите внимание, что Вы можете установить первичный ключ как тип, отличный от целого числа. Ограничение ORM в django состоит в том, что каждая модель должна иметь ровно один первичный ключ. Поэтому, если у вас нет первичного ключа для вашей таблицы, либо добавьте его, либо вам придется обходиться без помощи ORM django.

Кроме того, поскольку вы подключаетесь к существующему набору данных, возможно, связанному с другими приложениями, вы вряд ли захотите использовать ./manage.py syncdb, поскольку это может привести к нежелательным действиям.

0 голосов
/ 22 августа 2009

Просто комментируйте строки приложения django кортежа INSTALLED_APPS в файле вашего проекта settings.py (в начале проекта, перед запуском syncdb).

0 голосов
/ 21 августа 2009

Не устанавливайте никакие встроенные приложения Django и не используйте models.py в своих приложениях. В вашей базе данных будет ноль таблиц.

У вас не будет пользователей, сайтов или сеансов - это функции Django, которые используют базу данных.

AFAIK у вас все же должна быть база данных SQLite. Я думаю, что некоторые части Django предполагают, что у вас есть соединение с базой данных, и оно может попытаться установить это соединение.

Это простой эксперимент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...