Настройка проблем 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.

Другие вопросы по тегам