Ошибка Django 2.1 SQL Server 17 - недоступен серверной части базы данных. Попробуйте использовать 'django.db.backends.XXX'
django.core.exceptions.ImproperlyConfigured: 'django-pyodbc-azure' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
Я попытался перейти на следующие настройки базы данных, но безуспешно.
DATABASES = {
'default': {
'ENGINE': 'django-pyodbc-azure', #None of these work either: 'django_pyodbc' 'sqlserver_ado', 'sql_server.pyodbc', 'django-pyodbc-azure','pyodbc'
'HOST': 'test-server-local',
'NAME': 'db-name',
'USER': 'sql_username',
'PASSWORD': 'password',
'PORT': '1433'
# 'OPTIONS': {
# 'driver': 'ODBC Driver 17 for SQL Server'
# 'driver': 'SQL Server Native Client 11.0',
# 'provider': 'SQLOLEDB' # Have also tried 'SQLCLI11' and 'SQLOLEDB'
# 'extra_params': 'DataTypeCompatibility=80'
# }
}
}
Мне удалось получить доступ к базе данных SQLLite, и я могу запустить импорт pyodbc (напрямую через Python), но не могу использовать это в Django.
Я уже упоминал следующие вопросы о переполнении стека (без удачи). Решение 1 Решение 2 и версии Django/SQL Server, которые у них есть, намного старше, чем у меня. Я не хотел бы переходить с Django v2.1 на более низкий, просто чтобы поддерживать базу данных SQL Server, не проверяя, есть ли другие варианты.
Я проверил и добавил следующие site-пакеты в мои переменные пути среды / системы:
C:\Users\\AppData\Local\Programs\Python\Python37-32\Lib\site-packages
- django_pyodbc
- django_pyodbc-2.0.0a1.dist-info
- django_mssql-1.8.dist-info
- django_pyodbc_azure-2.1.0.0.dist-info
Запуск следующего кода ударит по базе данных и вернет данные, так что я знаю, что это не просто Python, но, вероятно, Django.
import pyodbc
server = 'test-server-local'
database = 'TEST-DB'
username = 'sql_username'
password = 'password'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT DepartmentName, DepartmentID from dbo.Departments;")
row = cursor.fetchone()
while row:
print(row.DepartmentID, row.DepartmentName)
row = cursor.fetchone()
1 ответ
Вот полная настройка, которая проверена как работающая, пока django-pyodbc-azure
установлен в вашем текущем virtualenv:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'dbserver.your-domain.com',
'PORT': '1433',
'NAME': 'project',
'USER': 'project_user',
'PASSWORD': 'project_password',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'unicode_results': True,
},
},
}
Полные инструкции находятся здесь: https://pyphilly.org/django-and-sql-server-2018-edition/
У меня была та же проблема, что и у OP. Я использую PyCharm. В конце концов я пришел к выводу, что моя виртуальная среда не работает должным образом. Я не мог понять, в чем проблема... с консоли python я мог импортировать sql_server, поэтому он был на пути, но мои тесты в pycharm не согласились, давая ту же ошибку, что и выше.
Итак, я создал новую виртуальную среду, на этот раз из pycharm, переустановил файл requirements.txt и все заработало.
Возможно, у меня была какая-то тонкая ошибка в настройке pycharm, которая была каким-то образом исправлена путем создания venv изнутри pycharm. Может, какая-то странная винда.