Как использовать Django с сервером Sql

Обычно я использую Postgres для своих нужд базы данных с Django, но недавно я начал работать в компании, которая использует MSSQL в среде Windows. Короче говоря, мне пришлось переписать свойства базы данных в settings.py. К сожалению, я понятия не имею, как подключиться к SQL Server с помощью Pyodbc, и они работают под управлением Python 3.x, поэтому я не могу использовать Django-Pyodbc. При попытке запустить его я получаю: «Имя источника данных не найдено, и драйвер по умолчанию не указан (0) (SQLDriverConnect) ')»

Вот моя текущая конфигурация БД в ее нынешнем виде. Вероятно, я делаю что-то не так, но найти ресурсы очень сложно, поскольку большинство результатов Django + Sql Server используют либо FreeTDS, либо Django-Pyodbc (ни один из вариантов).

'default': {
    'ENGINE': 'sql_server.pyodbc',
    'NAME': 'db_name_on_server',
    'USER': 'my_acct',
    'PASSWORD': 'nope',
    'HOST': 'x.x.x.x',
    'PORT': '1433',
    'OPTIONS': {  # Options are not edited
        'driver': 'SQL Server',  # What it displays as on odbc admin   
        'dsn': 'System DSN',  # What it displays as on odbc admin
        'use_legacy_datetime': False
    }

person Will.Beasley    schedule 24.09.2015    source источник
comment
@Ivan, они уникальны. Как я уже сказал, я использую Python 3.x, поэтому Django-Pyodbc нежизнеспособен.   -  person Will.Beasley    schedule 25.09.2015


Ответы (3)


Старый вопрос, но это может помочь кому-то. Это настройки, которые я использую в Windows для подключения к SQL Server. Как сказал @flipperpa, я также использую django-pyodbc-azure

pyodbc==3.0.10
django-pyodbc-azure==1.10.0.1

Однако pyodbc, который загружает pip, у меня не работает. Как было предложено в этом ответе, перейдите на этот сайт http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyodbc и загрузите в зависимости от версия Python 3.5, которую вы установили:

  • pyodbc‑3.0.10‑cp35‑none‑win32.whl если у вас установлена ​​32-битная версия Python 3.5
  • pyodbc‑3.0.10‑cp35‑none‑win_amd64.whl если у вас установлена ​​64-битная версия Python 3.5

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

'default': {
 'ENGINE': 'sql_server.pyodbc',
 'HOST': "localhost",
 'USER': "--user name--",
 'PASSWORD': "--password--",
 'NAME': "--database name--",
 'PORT': 1433,
 'OPTIONS': {
      'driver' : 'SQL Server Native Client 11.0',
      'MARS_Connection' : True,
      'driver_supports_utf8' : True,
 },
}

Для всех, кто использует Linux, MS теперь выпустила официальные драйверы odbc для SQL-сервера и официально (хотя и неявно) поддерживает проект django-pyodbc-azure. Я настоятельно рекомендую использовать его, а также собственный драйвер ODBC для Linux для SQL Server поверх FreeTDS.

person Diego Jancic    schedule 18.10.2016

Мне больше всего повезло со следующим стеком, и мы являемся исключительно магазином Python 3:

  • БесплатнаяTDS 0.95
  • pyodbc 3.0.10
  • django-pyodbc-azure 1.8.3 (при условии, что Django 1.8+)

Предполагая, что у вас есть odbc.ini, odbcinst.ini и freetds.conf все в квадрате, вот пример настроек, которые работают для меня. Некоторые из них зависят от того, используете ли вы SQL Server 2008+ или нет:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'yourserver.com',
        'PORT': '1433',
        'NAME': 'your_db',
        'USER': 'your_user',
        'PASSWORD': 'your_pw',
        'AUTOCOMMIT': True,
        'OPTIONS': {
            'driver': 'FreeTDS',
            'unicode_results': True,
            'host_is_server': True,
            'extra_params': 'tds_version=7.2;',
        },
    },
}

Вам также необходимо включить 'use_legacy_datetime': True,, если вы используете SQL Server 2005 или более раннюю версию, в противном случае будут использоваться новые поля даты SQL Server 2008+. Также автоматически устанавливается значение true, если вы используете устаревший драйвер. Удачи!

person FlipperPA    schedule 24.09.2015
comment
Спасибо, но зависит ли Pyodbc от FreeTDS? Есть ли аналог Windows? Я считаю, что FreeTDS предназначена только для среды Unix. Спасибо! - person Will.Beasley; 25.09.2015

Тем временем есть django-mssql-backend для поддержки MSSQL, и вот как выглядят мои настройки (Django 3.0, django-mssql-backend 2.8.1)

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'HOST': os.getenv('DB_HOST'),
        'PORT': os.getenv('DB_PORT'),
        'TEST': {
            'NAME': os.getenv('DB_NAME'),
        },
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'extra_params': 'MARS_Connection=Yes'
        },
    }
}
person lhaferkamp    schedule 03.11.2020