Создать несколько моделей из существующей базы данных в Django - PullRequest
4 голосов
/ 30 марта 2010

Я знаю, что это существует

django-admin.py inspectdb > models.py

Однако есть ли простой способ ограничить его? Без ручного удаления того, что я не хочу.

Я подключаюсь к базе данных, содержащей более ста таблиц, но мне нужны только модели из 4 или 5. Существует ли простой способ создания моделей из нескольких заданных таблиц?

Это довольно большие столы, поэтому мне не хочется их печатать.

Ответы [ 4 ]

7 голосов
/ 19 августа 2010

Я только что сделал это сам, также с Oracle. Это возможно - но не красиво.

Предполагая, что вы знаете имена нужных вам таблиц -

открыто django/db/backends/oracle/introspection.py. Есть функция get_table_list:

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()]

Просто замените его на что-то вроде

def get_table_list(self, cursor):
    names = ['mytable1', 'mytable2', 'mytable3']
    return names

Затем запустите inspectdb, и это будет намного более управляемым:)

0 голосов
/ 19 сентября 2018

Начиная с Django 1.10, команда inspectdb принимает необязательный список таблиц в командной строке, который ограничивает, какие таблицы будут проверяться.

0 голосов
/ 12 марта 2016

Следующее решение, данное @ pfctdayelise

Для django 1.8 MySQL Backend

открыть django/db/backends/mysql/introspection.py и найти функцию get_table_list:

def get_table_list(self, cursor):
    cursor.execute("SHOW FULL TABLES")
    return [TableInfo(row[0], {'BASE TABLE': 't', 'VIEW': 'v'}.get(row[1]))
            for row in cursor.fetchall()]

Замените его на что-то вроде

def get_table_list(self, cursor):
    names = [TableInfo('mytable1', 't')]
    return names

Чтобы решить, является ли второй аргумент TableInfo t или v, запустите запрос mysql SHOW FULL TABLES и выясните свой table_type, если это BASE_TABLE, тогда второй аргумент t остальное v

Затем запустите

python manage.py inspectdb > models.py
0 голосов
/ 01 апреля 2010

Не использовать syncdb > models.py. Это не хорошая практика. Сделайте ваши модели вручную и добавьте managed=False к нему. Если вы не добавите его, все ваши таблицы базы данных могут быть удалены с помощью одной команды. После создания моделей запустите syncdb, чтобы таблицы были связаны.

...