2016-12-17 2 views
1

Я новичок в Django и в настоящее время пытаюсь использовать другую базу данных для сохранения моей модели (т. Е. MS SQL). Моя база данных развернута в контейнере докера:Как настроить параметр базы данных Django-MSSQL с помощью django-pyodbc (ubuntu 16.04)?

903876e64b67  microsoft/mssql-server-linux "/bin/sh -c /opt/mssq" 5 hours ago   Up 5 hours   0.0.0.0:8888->1433/tcp    nauseous_williams 

Я также создаю нового пользователя для моего входа на SQL Server.

Username='kucing', password='xxxxx'

С моим пользователем, я могу использовать SQLCMD, чтобы получить доступ к моей БД, как показано ниже:

sqlcmd -S localhost,8888 -U kucing -P 'xxxxx'

Поэтому я изменить мой Django настройки для моей БД, как показано здесь:

DATABASES = { 
    'default': { 
    'ENGINE': 'sql_server.pyodbc', 
    'NAME': 'videogame', #The DB name 
    'USER': 'kucing', 
    'PASSWORD': 'xxxxx', 
    'HOST': 'localhost', 
    'PORT': '8888', 

    'OPTIONS': { 
     'driver': 'ODBC Driver 13 for SQL Server', 
    }, 
}, 

Однако, когда я запустил python manage.py migrate, у меня возникла ошибка, связанная с аутентификацией:

Traceback (most recent call last): 
File "/home/luca/git/learnPython/DjangoTicTacToe/lib/python3.5/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection 
    self.connect() 
File "/home/luca/git/learnPython/DjangoTicTacToe/lib/python3.5/site-packages/django/db/backends/base/base.py", line 171, in connect 
    self.connection = self.get_new_connection(conn_params) 
File "/home/luca/git/learnPython/DjangoTicTacToe/lib/python3.5/site-packages/sql_server/pyodbc/base.py", line 302, in get_new_connection 
    timeout=timeout) 
    pyodbc.Error: ('28000', "[28000] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed for user 'kucing'. (18456) (SQLDriverConnect)") 

Я неправильно установил свою конфигурацию? Должен ли я обновлять настройки?

ответ

0

Мне удалось выяснить проблему. Потому что я запускаю как приложение Django, так и сервер MS SQL в Linux, мне нужно изменить мой драйвер на FreeTDS. Эта ссылка полезна: How to install freetds in Linux?

После того как я закончить установку драйвера FreeTDS на моем хосте (Ubuntu), я обновил настройки баз данных следующим образом:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'videogame', 
     'USER': 'sa', 
     'PASSWORD': 'xxxxx', 
     'HOST': 'localhost', 
     'PORT': '8888', 
     'OPTIONS' : { 
      'driver': 'FreeTDS', 
      'unicode_results': True, 
      'host_is_server': True, 
      'extra_params': 'tds_version=7.0;', 
      } 
    } 
} 

Затем я создаю суперпользователя с помощью этой команды:

python manage.py createsuperuser 

И, наконец, я миграции базы данных:

python manage.py makemigrations; python manage.py migrate 
0

Предполагается, что вы размещаете в Windows, поскольку вы пытаетесь подключиться к localhost. Я настоятельно рекомендую использовать движок django-pyodbc-azure (https://github.com/michiya/django-pyodbc-azure), так как он может использоваться как для локального SQL Server, так и для Azure и является лучшим поддерживаемым пакетом Django SQL Server, который я видел за несколько лет использования. Для того, чтобы установить:

pip install django-pyodbc-azure 

Это будет также установить pyodbc зависимость. Поскольку вы запускаете Django в Windows (иначе вы бы не подключались к localhost), вы можете использовать собственный клиент. Вот что я хотел бы начать с ваших настроек:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'videogame', 
     'USER': 'kucing', 
     'PASSWORD': 'xxxxx', 
     'HOST': 'localhost', 
     'PORT': '8888', 

     'OPTIONS': { 
      'driver': 'SQL Server Native Client 13.0', 
     }, 
    }, 
} 

Кроме того, вы должны никогда разместить свой пароль на переполнение стека! Я очень рекомендую изменить его. Как правило, если вы публикуете свой пароль как xxxxx или что-то в этом роде, люди поймут, почему. Удачи!

+0

Спасибо. Но я использую Linux OSX. Я выяснил проблему, хотя –

Смежные вопросы