Настройка проблем django-mssql
У меня возникли некоторые проблемы при настройке django-mssql на Win Server 2008 R2. У меня все установлено, однако, вики для django-mssql говорит, чтобы установить файл настроек, подобный следующему:
DATABASES = {
'default': {
'NAME': 'my_database',
'ENGINE': 'sqlserver_ado',
'HOST': 'dbserver\\ss2008',
'USER': '',
'PASSWORD': '',
'OPTIONS' : {
'provider': 'SQLOLEDB',
'use_mars': True,
},
}
}
Когда я запускаю из каталога моего сайта:
python manage.py syncdb
Я получаю сообщение об ошибке, утверждающее, что это недоступный сервер базы данных. Когда я установил django-mssql, он, похоже, установил бэкэнд здесь \site-packages\django_mssql-1.0.1-py2.7.egg\sqlserver_ado. Нужно ли это копировать в site-packages \ django \ db \ backends?
Я получаю ту же ошибку, если я установил свои настройки на:
DATABASES = {
'default': {
'NAME': 'my_database',
'ENGINE': 'django_mssql-1.0.1-py2.7.egg.sqlserver_ado',
'HOST': 'dbserver\\ss2008',
'USER': '',
'PASSWORD': '',
'OPTIONS' : {
'provider': 'SQLOLEDB',
'use_mars': True,
},
}
}
Я что-то упускаю при настройке этого бэкэнда? Я впервые использую django, но я не увидел в документации ничего для настройки другого бэкэнда, и вики или проблемы django-mssql, похоже, тоже ничего не имеют.
Кроме того, если есть другая документация, которая может помочь, пожалуйста, дайте мне знать.
РЕДАКТИРОВАТЬ: приложение django работает на сервере Ubuntu.
5 ответов
Вы должны убедиться, что можете импортировать "sqlserver_ado" из вашей оболочки Python.
Поместите папку sqlserver_ado где-нибудь в вашем PATH, я помещаю мою в \site-packages\
Взгляните на файл README.txt.
Движок действительно хочет установить значение "sqlserver_ado" аналогично тому, как настройки выполняются на странице примера настроек.
Комментарий Дастина о том, что "import sqlserver_ado" из командной оболочки заставил меня пойти по правильному пути в моей системе Django 1.8.1, Python 3.5 Win32 с установленным pywin32.
Предупреждение о спойлере Это только заставляет мой экземпляр Django работать без ошибок. Я еще не проверял соединение ADO.
Первое сообщение об ошибке, которое я получил, было:
No module named 'django.db.backends.util'
и я обнаружил, что есть файл с именем: django.db.backends.utils, поэтому я скопировал его и переименовал в django.db.backends.util (без 's') и сразу же отправил сообщение об ошибке!
Поэтому, надеясь, что это не слишком вредно, я продолжил заниматься устранением неполадок.
Следующее сообщение об ошибке, которое я получил, было:
File "C:\Program Files (x86)\Python35-32\lib\site-packages\sqlserver_ado\base.py", line 7, in <module>
from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseValidation, BaseDatabaseClient
ImportError: cannot import name 'BaseDatabaseWrapper'
Я изменил строку 7 в base.py, чтобы теперь сказать:
#from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseValidation, BaseDatabaseClient
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.base.features import BaseDatabaseFeatures
from django.db.backends.base.validation import BaseDatabaseValidation
from django.db.backends.base.client import BaseDatabaseClient
Да, это комментирует плохую строку и добавляет четыре отдельные строки. Тогда я получил эту ошибку:
File "C:\Program Files (x86)\Python35-32\lib\site-packages\sqlserver_ado\base.py", line 18, in <module>
from .introspection import DatabaseIntrospection
Файл "C:\Program Files (x86)\Python35-32\lib\site-packages\sqlserver_ado\introspection.py", строка 3, из django.db.backends import BaseDatabaseIntrospection ImportError: невозможно импортировать имя "BaseDatabaseIntrospection"
поэтому я изменил строку 3, чтобы теперь читать:
from django.db.backends.base.introspection import BaseDatabaseIntrospection
и так далее для creation.py:
from django.db.backends.base.creation import BaseDatabaseCreation
для операций.py:
from django.db.backends.base.operations import BaseDatabaseOperations
для schema.py:
from django.utils.log import getLogger
Надеюсь, это кому-нибудь поможет. Надеюсь, модуль ADO на самом деле подключается к чему-то.
-Sean
По состоянию на 2019 год:
Я не мог заставить Django MSSQL работать вообще.
Я переключился на https://pypi.org/project/django-pyodbc-azure/, и это прекрасно работает.
Установка:
pip install django-pyodbc-azure
Настроить:
'ENGINE': 'sql_server.pyodbc'
Я пытался заставить django_pyodbc работать, но не смог. Я получаю эту ошибку:
django.core.exceptions.ImproperlyConfigured: 'django_pyodbc' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
u'base', u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: cannot import name BaseDatabaseWrapper
Я был направлен на этот пост в качестве решения, поэтому я также опубликую свой ответ здесь. Я опустил версию до django 1.6 вместо 1.8, и теперь django_pyodbc работает как база данных.
Вам необходимо установить зависимость PyWin32. Вы можете установить его через pip или загрузить со страницы двоичных файлов python http://www.lfd.uci.edu/~gohlke/pythonlibs/
Согласно https://github.com/lionheart/django-pyodbc/pull/96, django_pyodbc теперь должен работать с Django 1.8. Так что это, кажется, хорошая альтернатива django-mssql для тех, кому требуется поддержка SQL Server 2008 R2.