Учитывая строку подключения ODBC для базы данных, как я могу изменить свой файл settings.py таким образом, чтобы мое приложение Django подключалось к нему? - PullRequest
0 голосов
/ 31 декабря 2018

Мне дали строку подключения ODBC для подключения к базе данных.Однако у меня возникли трудности с подключением к нему моего приложения Django.Как правильно подключить мое приложение к нему?Я что-то упустил в своем коде?

Это моя строка подключения:

Driver={SQL Anywhere 17};uid=user;pwd=secret;server=databasename;astart=No;host=127.0.0.1;port=1234

Используя тестовый скрипт, использующий pyodbc, я могу подключиться к базе данных.Однако, когда я пытаюсь изменить файл settings.py для моего приложения, оно не может подключиться к базе данных.

Requirements.py

django~=2.1.4
pyodbc~=4.0.25
django-pyodbc-azure~=2.1.0.0

Settings.py

#First Attempt
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': '127.0.0.1,1234',
        'USER': 'user',
        'PASSWORD': 'secret',
        'NAME': 'databasename',
        'PORT': '1234',
        'OPTIONS': {
            'driver' : 'SQL Anywhere 17',
            'host_is_server': 'True',
        },
    }
}

#Second Attempt
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': '',
        'NAME': 'databasename;',
        'PORT': '',
        'OPTIONS': {
            'host_is_server': 'True',
            'dsn': 'Driver={SQL Anywhere 17};uid=user;pwd=secret;server=databasename;astart=No;host=127.0.0.1;port=1234'
        },
    }
}

Для первой попытки я получаюследующая ошибка:

django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

При второй попытке я получаю следующую ошибку:

django.db.utils.Error: ('IM010', '[IM010] [Microsoft][ODBC Driver Manager] Data source name too long (0) (SQLDriverConnect)')

Я не уверен, что делаю неправильно.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 31 декабря 2018

Добро пожаловать в переполнение стека, Бенджамин!Попробуйте:

DATABASES = {
    "default": {
        "ENGINE": "sql_server.pyodbc",
        "HOST": "127.0.0.1",
        "PORT": "1234",
        "NAME": "databasename",
        "USER": "user",
        "PASSWORD": "secret",
        "AUTOCOMMIT": True,
        "OPTIONS": {
            "driver": "SQL Anywhere 17",
            "unicode_results": True,
            "host_is_server": True,
        },
    },
}

Одним из ключей здесь является настройка "driver".Он должен соответствовать названию раздела драйвера в вашем файле odbcinst.ini.Например, в моем /etc/odbcinst.ini есть следующее:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
UsageCount=1

В моем случае я использую: "driver": "ODBC Driver 17 for SQL Server", в словаре OPTIONS, поэтому он соответствует заголовку заголовка в odbcinst.iniконфигурационный файл.Вот где я видел, что большинство людей спотыкаются.Удачи!

...