Запрос еще одной существующей БД MSSQL из Linux

Я развернул django приложение, работающее на Linux (Ubuntu) в VirtualBox. Секция базы данных файла settings выглядит следующим образом.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

В локальной сети есть MSSQL Server с базой данных x и несколькими таблицами. Я хотел бы создать view с datagrid, который способен работать с данными из базы данных x, предоставляя базовую CRUD функциональность с возможностью фильтров. Не могли бы вы направить меня на шаги с соответствующей документацией, которые я должен выполнить? Вам не нужно вдаваться в подробности, только указать, что мне нужно отредактировать и на что обратить внимание, чтобы достичь желаемого результата.

В общем случае вы указываете такие параметры, как host, port, database_name и т.д. в settings.py.

На pipy есть пакет драйверов django-mssql-backend для mssql соединений. Он предоставляет хороший README.md, где вы можете прочитать больше.


В общем, если вы хотите установить mssql-server в качестве базы данных по умолчанию, замените конфигурацию по умолчанию на mssql-config:

DATABASES = {
    'default': {
        'ENGINE': "sql_server.pyodbc",
        'NAME': "DB_NAME",
        'HOST': "127.0.0.1",
        'PORT': 1234,
    }
}

Если вы хотите добавить mssql-сервер как новую базу данных, вам нужно указать это как новую запись в DATABASES-configuration:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'mssql': {
        'ENGINE': "sql_server.pyodbc",
        'NAME': "DB_NAME",
        'HOST': "127.0.0.1",
        'PORT': 1234,
    }
}

Если вы добавляете db как новую запись, вам нужно указать DatabaseRouter для маршрутизации запросов к нужной базе данных. Хороший обзор по этому вопросу вы найдете в официальной документации django здесь. Добавьте DatabaseRouter в settings.py следующим образом:

DATABASE_ROUTERS = ['path.to.MSSQLRouter']

Теперь создайте новое приложение (вам нужно указать имя app_name во вновь созданном маршрутизаторе) и добавьте модели, представления и url маршрутизации как обычно.

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

Чтобы использовать MySQL с Django, сначала нужно установить пакет, выполните эту команду в консоли (вы также можете использовать Pipenv или ваш любимый инструмент вместо pip3):

pip3 install mysqlclient

Теперь вам нужно настроить базу данных в settings.py файле вашего проекта:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',  # The name of your database
        'USER': 'username',  # The username of the user used to manage the database
        'PASSWORD': '12345',  # The password of the user used to manage the database
        'HOST': 'localhost',  # Or a different IP to locate the server
        'PORT': '3306',
    }
}

Не забудьте предоставить все привилегии на вашей базе данных пользователю MySQL, используемому Django, выполните эту команду в оболочке SQL (если вы еще не сделали этого):

GRANT ALL PRIVILEGES ON your_database_name.* TO 'username'@'localhost';
FLUSH PRIVILEGES; 

Обратите внимание, что ваша база данных должна использовать UTF8, только если она использует другую кодировку, выполните эти команды в оболочке SQL (вторая команда должна быть повторена для всех таблиц вашей базы данных):

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; 

Теперь вам нужно проинспектировать базу данных, чтобы создать модели с помощью Django, выполните эту команду в консоли:

python manage.py inspectdb

Вывод будет содержать сгенерированные модели, вы также можете перенаправить вывод в файл:

python manage.py inspectdb > models.py

Вывод inspectdb будет содержать все модели, сгруппированные вместе, поэтому вам нужно создать models.py файл для каждого приложения вашего проекта, чтобы содержать связанные модели. Я думаю, что в вашем случае вы можете просто поместить все модели в файл models.py вашего приложения core (просто скопируйте и вставьте вывод предыдущей команды в этот файл).

Обратите внимание, что эта функция является сокращением, поэтому вы должны доработать сгенерированные модели. Читайте документацию для подробностей о том, как правильно писать модели.

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

python manage.py migrate

Посмотрите это для получения подробной информации о том, как интегрировать Django с существующей базой данных.

Теперь вы можете нормально писать представления, прочитайте этот раздел (Слой представления) документации для подробностей.

Вернуться на верх