#python #django #pyodbc #django-pyodbc
#питон #джанго #pyodbc #django-pyodbc
Вопрос:
У меня возникли проблемы с подключением к базе данных SQL Server через python manage.py dbshell / загрузка данных.
Я настроен на Ubuntu с помощью FreeTDS, unixODBC, pyodbc (3.0.7) и django-pyodbc отсюда: https://github.com/lionheart/django-pyodbc /
Я могу успешно запускать миграции syncdb и South. Однако, когда я пытаюсь запустить dbshell или loaddata, я получаю эту ошибку:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
Я могу подключиться из командной строки, используя isql и tsql. Есть какие-нибудь идеи о том, чего мне не хватает?
Ответ №1:
Итак, я разобрался в проблеме.
Если вы хотите использовать dbshell или loaddata, вам нужно использовать именованный DSN вместо просто хоста. Я правильно настроил это в /etc/freetds.conf, /etc/odbcinst.ini и /etc/odbc.ini, поэтому tsql и isql работали.
Я использовал эту БАЗУ ДАННЫХ по умолчанию в settings.py:
'ENGINE': 'django_pyodbc',
'NAME': 'db_name',
'USER': 'user_name',
'PASSWORD': 'pw',
'HOST': 'hostname.domain.com,1433',
'PORT': '1433',
'OPTIONS': {
'host_is_server': True,
'autocommit': True,
'unicode_results': True,
'extra_params': 'tds_version=7.2'
},
Мне пришлось изменить его на:
'ENGINE': 'django_pyodbc',
'NAME': 'db_name',
'USER': 'user_name',
'PASSWORD': 'pw',
'PORT': '1433',
'OPTIONS': {
'host_is_server': True,
'dsn': 'dsn_name',
'autocommit': True,
'unicode_results': True,
'extra_params': 'tds_version=7.2'
},
Вы заметите, что в первом (неработающем) примере используется «ХОСТ», в то время как во втором (рабочем) примере используется «dsn» в разделе «ПАРАМЕТРЫ».
Комментарии:
1. Я изменил версию TDS с 8.0 на 7.2 на этой странице: freetds.org/userguide/choosingtdsprotocol.htm — Я также могу подтвердить, что это работает на SQL Server 2012 и 2014.