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

StackOverflow https://stackoverflow.com/questions/2547605

Вопрос

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

django-admin.py inspectdb > models.py

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

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

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

Это было полезно?

Решение

Я только что сделал это сам, тоже с 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 и это будет намного более управляемо :)

Другие советы

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

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

Для django 1.8 серверная часть mysql

Открыть 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top