django-pyodbc-azure нет модуля с именем 'sql_server'
Я пытаюсь использовать корпоративный SQL Server в качестве бэкэнда для моего проекта Django с Python 3.5.2. Я установил Django 2.0.3, pyodbc==4.0.22, django-pyodbc-azure 2.0.3, pypiwin32==219 (стоп-код ниже). Я также настроил БАЗЫ ДАННЫХ в файле settings.py (см. Ниже). При попытке запустить сервер я получаю следующую ошибку: Нет модуля с именем "sql_server". Я сослался на другие вопросы, наиболее актуальным из которых оказался: " Нет модуля с именем sql_server.pyodbc.base", который пришел к выводу, что версии django-pyodbc-azure и Django должны быть идентичными. Это не решило мою проблему, однако; та же ошибка сохраняется.
Traceback (most recent call last):
File "manage.py", line 24, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\K5SH\venv\lib\site-packages\django\core\management\__init__.py"
, line 338, in execute_from_command_line
utility.execute()
File "C:\Users\K5SH\venv\lib\site-packages\django\core\management\__init__.py"
, line 312, in execute
django.setup()
File "C:\Users\K5SH\venv\lib\site-packages\django\__init__.py", line 18, in se
tup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\K5SH\venv\lib\site-packages\django\apps\registry.py", line 108,
in populate
app_config.import_models(all_models)
File "C:\Users\K5SH\venv\lib\site-packages\django\apps\config.py", line 198, i
n import_models
self.models_module = import_module(models_module_name)
File "C:\Users\K5SH\AppData\Local\Programs\Python\Python35-32\lib\importlib\__
init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 665, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "C:\Users\K5SH\venv\lib\site-packages\django\contrib\auth\models.py", lin
e 41, in <module>
class Permission(models.Model):
File "C:\Users\K5SH\venv\lib\site-packages\django\db\models\base.py", line 139
, in __new__
new_class.add_to_class('_meta', Options(meta, **kwargs))
File "C:\Users\K5SH\venv\lib\site-packages\django\db\models\base.py", line 324
, in add_to_class
value.contribute_to_class(cls, name)
File "C:\Users\K5SH\venv\lib\site-packages\django\db\models\options.py", line
250, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length(
))
File "C:\Users\K5SH\venv\lib\site-packages\django\db\__init__.py", line 36, in
__getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Users\K5SH\venv\lib\site-packages\django\db\utils.py", line 240, in _
_getitem__
backend = load_backend(db['ENGINE'])
File "C:\Users\K5SH\venv\lib\site-packages\django\db\utils.py", line 129, in l
oad_backend
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: 'sql_server.pyodbc' isn't an availa
ble database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'base', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3'
Error was: No module named 'sql_server'
Установленные пакеты:
chardet==2.3.0
configparser==3.5.0
cycler==0.10.0
diff-match-patch==20121119
Django==2.0.3
django-crispy-forms==1.7.2
django-csvimport==2.4
django-debug-toolbar==1.9.1
django-import-export==1.0.0
django-money==0.9.1
django-mssql==1.8
django-pyodbc-azure==2.0.3.0
djangorestframework==3.6.3
et-xmlfile==1.0.1
jdcal==1.3
matplotlib==1.5.3
mysqlclient==1.3.12
numpy==1.11.2rc1+mkl
openpyxl==2.4.8
pandas==0.18.1
psycopg2==2.7.3.2
pymssql==2.1.2
pyodbc==4.0.22
pyparsing==2.1.9
pypiwin32==219
pypyodbc==1.3.3
python-dateutil==2.5.3
pytz==2016.6.1
scipy==0.18.1
seaborn==0.7.1
six==1.10.0
sqlalchemy==1.1.4
sqlparse==0.2.4
tablib==0.10.0
virtualenv==15.0.3
xlrd==1.0.0
xlwt==1.2.0
Базы данных:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'my_db_name',
'USER': '',
'PASSWORD': '',
'HOST': 'my_sql_host',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
}
(Примечание: я пытался сделать это как с настройкой "OPTIONS", так и без нее).
2 ответа
Я начал заново на Windows, используя Python 3.6.0 и virtualenv 15.1.0. Они должны быть достаточно близко, чтобы это работало.
Сначала я создал и активировал virtualenv
и установлен django-pyodbc-azure
который в свою очередь установил Django и pyodbc как зависимости:
virtalenv djangowin
djangowin\Scripts\activate.bat
pip install django-pyodbc-azure
Затем я начал новый проект Django:
django-admin startproject sqltest
Потом я отредактировал sqltest\sqltest\settings.py
и обновил мой DATABASES
Определение для использования только что созданной базы данных:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'cdw-sql0101.wharton.upenn.edu',
'PORT': '1433',
'NAME': 'flipperpa',
'USER': 'flipperpa',
'PASSWORD': '',
'AUTOCOMMIT': True,
'OPTIONS': {
'driver': 'SQL Server',
'unicode_results': True,
'host_is_server': True,
},
}
}
... и это сработало как шарм
(djangowin) C:\Users\tallen\sqltest>python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
March 23, 2018 - 16:39:51
Django version 2.0.3, using settings 'sqltest.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Есть ли какой-то шаг по этому пути, который не работает для вас? Вы уверены, что ваш virtualenv
активен? Команда djangowin\Scripts\activate.bat
это очень важно - вы будете делать это каждый раз, когда открываете новое окно терминала.
Я обнаружил эту проблему в основном из-за версии django. Я заменил свою версию Django на django==2.1.15, тогда она сработала. django-pyodbc-azure==2.1.0.0 pyodbc=4.0
Виртуальная среда по умолчанию не работает должным образом в Azure. Команда активации, кажется, не имеет никакого эффекта. Но если вы создадите свою собственную виртуальную среду на Azure, она будет работать правильно. Я столкнулся с такой же проблемой для своего проекта, когда установил для себя виртуальную среду и отредактировал сценарии конфигурации автоматического развертывания. Сейчас работает отлично.