Не удается подключиться к устаревшей базе данных с помощью django-pyodbc
Я установил django-pyodbc и настроил параметры своей базы данных следующим образом:
- DEV: Windows XP (64-битная), Python 3.3, MDAC 2.7
БД: Удаленный MSSQL 2008
DATABASES = { 'default': { 'ENGINE': 'django_pyodbc', 'HOST': 'my.server.com', 'PORT': '14330', 'USER': 'xxx500', 'PASSWORD': 'passw', 'NAME': 'xxx500', 'OPTIONS': { 'host_is_server': True }, } }
Я могу подключиться к серверу через telnet и получить доступ к базе данных через сторонний графический интерфейс Aqua Data Studio - поэтому я знаю, что при входе в систему не возникает проблема с брандмауэром
Когда я пытаюсь выполнить эту команду, чтобы проанализировать устаревшую базу данных, я получаю эту ошибку...
(myProject) :\Users\...>python manage.py inspectdb
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Python33\lib\site-packages\django\core\management\__init__.py", line 399, in execute_from_command_line
utility.execute()
File "C:\Python33\lib\site-packages\django\core\management\__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python33\lib\site-packages\django\core\management\base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "C:\Python33\lib\site-packages\django\core\management\base.py", line 285, in execute
output = self.handle(*args, **options)
File "C:\Python33\lib\site-packages\django\core\management\base.py", line 415, in handle
return self.handle_noargs(**options)
File "C:\Python33\lib\site-packages\django\core\management\commands\inspectdb.py", line 27, in handle_noargs
for line in self.handle_inspection(options):
File "C:\Python33\lib\site-packages\django\core\management\commands\inspectdb.py", line 40, in handle_inspection
cursor = connection.cursor()
File "C:\Python33\lib\site-packages\django\db\backends\__init__.py", line 157, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "C:\Python33\lib\site-packages\django_pyodbc\base.py", line 280, in _cursor
autocommit=autocommit)
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)')
Что мне не хватает? Был бы признателен за некоторые отзывы. Спасибо
3 ответа
Вам нужно добавить драйвер в вашу базу данных.
DATABASES = {
'default': {
.......
'OPTIONS': {
.......
'driver' : 'SQL Server',
.......
},
}
}
Строка. Драйвер ODBC для использования. По умолчанию "SQL Server" в Windows и "FreeTDS" на других платформах.
Я считаю, что это не то решение, которое вы хотели бы использовать; изменение кода django-pyodbc не очень хорошая идея. Тем не менее, убедитесь, что вы используете самый последний форк django-pyodbc, который в настоящее время можно найти здесь:
https://github.com/lionheart/django-pyodbc/
Вот пример конфигурации БД для settings.py, который я получил для работы на следующих платформах (w/FreeTDS / UnixODBC для Linux):
- Windows 7
- Ubuntu как виртуальная машина под Vagrant
- Mac OS / X для локальной разработки
- RHEL 5 + 6
Вот конфигурация:
DATABASES = {
'default': {
'ENGINE': 'django_pyodbc',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'your_password',
'HOST': 'database.domain.com,1433',
'PORT': '1433',
'OPTIONS': {
'host_is_server': True,
'autocommit': True,
'unicode_results': True,
'extra_params': 'tds_version=8.0'
},
}
}
Я сделал следующие изменения:
От
DATABASES = {
'default': {
'ENGINE': 'django_pyodbc',
'HOST': 'my.server.com',
'PORT': '14330',
'USER': 'xxx500',
'PASSWORD': 'passw',
'NAME': 'xxx500',
'OPTIONS': {
'host_is_server': True
},
}
}
к
DATABASES = {
'default': {
...
'HOST': 'my.server.com,14330',
...
}
}
и получил ошибку utf-8, которая требует комментирования строк 364-367 в файле django_pyodbc/base.py.