Почему именно эта комбинация?
- Мне нужно создать веб-сайт, который общается с базой данных MS SQL для отображения инвентаря компании (а БД создается проприетарным программным обеспечением, используемым компанией, поэтому переход на другую базу данных).это не вариант)
- Я изучал Django & Python в течение последних нескольких месяцев (через официальную документацию, онлайн-курсы, личные проекты), и так как я начинаю понимать вещи, я неЯ думаю, что мне следует внезапно переключиться на .NET или Node.JS, просто потому, что настройка все еще остается загадкой
- Я работаю над MacBook, так что Docker - единственный способустановить MS SQL Server (насколько я знаю).У меня действительно есть приличный ПК, который мне дал друг (просто нужно его настроить), и если кто-то думает, что это решит все мои проблемы, я пойду дальше и переключусь.
What I 'Вы уже сделали / выяснили (возможно, это было бы полезно для того, кто проходит через тот же процесс):
- есть множество руководств и руководств, которые объясняют, как использовать Django с Postgre, SQLite и т. д.- все выглядит очень просто, так что все, что мне действительно нужно, это установить
- Я установил SQL Server и запустил его в контейнере Docker (с помощью https://database.guide/how-to-install-sql-server-on-a-mac/, https://hub.docker.com/_/microsoft-mssql-server, и https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017&pivots=cs1-bash)
- Я успешно восстановил базу данных компании из файла .bak с помощью Azure Data Studio и могу запуститьзапрашивает его из командной строки, через Kitematic и, конечно же, сам ADS.
- Я попытался подключиться к базе данных из нового проекта Django (используя PyCharm, хотя это, вероятно, не имеет значения),используя настройки, изложенные здесь: https://github.com/michiya/django-pyodbc-azure Я получаю сообщение об ошибке «изображение не найдено», и вот полный вывод в консоли (на случай, если кто-то заметит что-то полезное):
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x105ff5158>
Traceback (most recent call last):
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/sql_server/pyodbc/base.py", line 15, in <module>
import pyodbc as Database
ImportError: dlopen(/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/pyodbc.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/unixodbc/lib/libodbc.2.dylib
Referenced from: /Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/pyodbc.cpython-37m-darwin.so
Reason: image not found
During handling of the above exception, another exception occurred:
*Traceback (most recent call last):
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/utils/autoreload.py", line 248, in raise_last_exception
raise _exception[1]
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/core/management/__init__.py", line 337, in execute
autoreload.check_errors(django.setup)()
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/apps/registry.py", line 112, in populate
app_config.import_models()
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/apps/config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/contrib/auth/models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/db/models/base.py", line 101, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/db/models/base.py", line 305, in add_to_class
value.contribute_to_class(cls, name)
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/db/models/options.py", line 203, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/db/__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/db/utils.py", line 202, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/django/db/utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/sql_server/pyodbc/base.py", line 17, in <module>
raise ImproperlyConfigured("Error loading pyodbc module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading pyodbc module: dlopen(/Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/pyodbc.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/unixodbc/lib/libodbc.2.dylib
Referenced from: /Users/student8/Desktop/GEMROVER/django_site/lib/python3.7/site-packages/pyodbc.cpython-37m-darwin.so
Reason: image not found*
IЯ уже несколько дней гуглю эти ошибки и читаю / смотрю различные руководства, но безрезультатно ... Кажется, что жалуется, что pyodbc не установлен, но я дважды проверил, и у меня естьЭто.То же самое для django-pyodbc-azure.
На всякий случай, вот что у меня есть в моем файле settings.py :
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': '*********',
'USER': 'sa',
'PASSWORD': '********',
'HOST': '192.168.1.97',
'PORT': '1433',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
}
Эта конкретная комбинация имени пользователя и пароля (***), IP-адрес хоста и порт прекрасно работают в Azure Data Studio.
- Я установил Django в другой контейнер Docker, следуя этому руководству: https://docs.docker.com/compose/django/ К сожалению, это показывает, как установить с Postgres, и не ясно, как изменить требования .txt файл, чтобы заставить это работать с сервером SQL (что я помещаю туда вместо psycopg2> = 2.7, <3.0, чтобы он работал с MS SQL?) </em>.Я полагаю, что-то вроде этого будет идти в docker-compose.yml :
db:
image: "mcr.microsoft.com/mssql/server"
environment:
SA_PASSWORD: "Your_password123"
ACCEPT_EULA: "Y"
(заимствовано из https://docs.docker.com/compose/aspnet-mssql-compose/)
И Dockerfile , вероятно, останется таким же, как показано здесь: https://docs.docker.com/compose/django/?
Мне также не совсем ясно, должны ли Django и SQL Server быть в одном и том же образе Docker,или два отдельных? Полагаю, одно и то же, поскольку именно так их учебник обрабатывает Django + Postgres? Кроме того, в будущем, когда придет время развертывать сайт, все это будет работать гладко, скажем, с Apache, или, если, возможно,Я иду с Azure?
Любая помощь будет принята с благодарностью! Если все это покажется вам чрезвычайно сложной ситуацией: да, я довольно новичок в веб-разработке ... Я старался изо всех сил читатьчерез все, что я мог найти здесь, в стеке и в других местах, но пока не смог найти решение.
ОБНОВЛЕНИЕ 1:
Ого, я сделалнемного прогресса! Обычно задаю вопросна помогает.Сначала я сделал
brew install unixodbc
Рекомендовано здесь: https://github.com/mkleehammer/pyodbc/issues/87 Это исправило ошибку, которую я получал ранее.Затем я получил еще одну ошибку:
Can't open lib 'ODBC Driver 13 for SQL Server'
Но исправили следующие:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools
(из ответа Рене на этот вопрос Не удается открыть lib 'ODBC Driver 13 for SQL Server'? Проблема с компоновкой Sym? , минус бит о --no-sandbox - thisдал больше ошибок, поэтому я удалил его)
Сайт Django по умолчанию загружен (через python manage.py runserver
), поэтому я, наконец, готов начать работу с базой данных SQL!Я доложу, как только убедился, что все идет гладко.Буду признателен за любые комментарии по поводу моих предыдущих вопросов (например, должен ли я иметь Django в контейнере докера, и если да, то должен ли он использовать контейнер совместно с SQL Server или находиться в отдельном?).