Запрос еще одной существующей БД 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 с существующей базой данных.
Теперь вы можете нормально писать представления, прочитайте этот раздел (Слой представления) документации для подробностей.