Django Написание проблемы с функцией переноса базы данных. - PullRequest
0 голосов
/ 27 октября 2019

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

Страница документации Django: https://docs.djangoproject.com/en/2.2/howto/writing-migrations/

Мой код (0001_initial.py, работает только с базой данных по умолчанию):

from django.db import migrations, models

def forwards(apps, schema_editor):
    if schema_editor.connection.alias == 'default':
        migrations.CreateModel(
                name='Planets',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('name', models.CharField(max_length=255)),
                    ('description', models.TextField(blank=True)),
                ],
            ),



class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.RunPython(forwards),
    ]

Другая миграция(работает только с базами данных не по умолчанию):

from django.db import migrations, models

def forwards(apps, schema_editor):

    if schema_editor.connection.alias != 'default':

        migrations.CreateModel(
            name='data_sources',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('sql_query', models.TextField(default='')),
            ],
        ),
        migrations.CreateModel(
            name='query_history',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('query', models.TextField()),
                ('date', models.DateField(auto_now_add=True)),
            ],
        ),

class Migration(migrations.Migration):

    dependencies = [
        ('universe','0001_initial')
    ]

    operations = [
         migrations.RunPython(forwards),
    ]

1 Ответ

0 голосов
/ 28 октября 2019

После одного дня усилий я нашел решение. Я больше не использую систему миграции Django для новых динамических баз данных. Вместо этого я использую Django SchemaEditor. Метод create_model () может автоматически создавать таблицы базы данных из любой модели.

SchemaEditor: https://docs.djangoproject.com/en/2.2/ref/schema-editor/

Если вы хотите использовать SchemaEditor для баз данных не по умолчанию, вы должны использовать модуль соединений. Например:

from django.db import connections

with connections['connection_alias'].schema_editor() as schema_editor:

                schema_editor.create_model(any model)

С другой стороны, если вы не хотите, чтобы django создавал миграцию из модели, вы должны установить для модели значение false в модели. Например:

class Objects(models.Model):
    class Meta:
       managed = False

Теперь, после

manage.py makemigrations

, django создаст файл миграции для этой модели (Небеспокоиться), но он никогда не создает таблицы в базе данных для этой модели.

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