首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 2.1 SQL Server 17错误-不是可用的数据库后端。尝试使用'django.db.backends.XXX‘

Django 2.1 SQL Server 17错误-不是可用的数据库后端。尝试使用'django.db.backends.XXX‘
EN

Stack Overflow用户
提问于 2018-08-24 06:36:20
回答 2查看 6.4K关注 0票数 3
代码语言:javascript
复制
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'

我尝试切换到以下数据库设置,但没有成功。

代码语言:javascript
复制
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 import (直接通过Python),但不能在Django中使用它。

我已经提到了下面关于堆栈溢出的问题(没有运气)。Solution 1 Solution 2和他们现有的Django/SQL Server版本比我设置的版本要老得多。我不想从Django v2.1降级到更低的版本,只是为了支持SQL Server数据库,而不检查是否有其他选择。

我验证了以下站点包并将其添加到我的环境/系统路径变量中:

代码语言:javascript
复制
    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。

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-24 09:46:59

只要您当前的虚拟环境中安装了django-pyodbc-azure,这里就是一个经过验证的完整设置:

代码语言:javascript
复制
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/

票数 4
EN

Stack Overflow用户

发布于 2019-11-24 10:42:47

确切地说,我和OP有同样的问题。我正在使用PyCharm。最后,我得出结论,我的虚拟环境不能正常工作。我看不出问题出在哪里。我可以从python控制台导入sql_server,所以它在路径上,但我在pycharm中的测试不一致,给出了与上面相同的错误。

所以我创建了一个新的虚拟环境,这一次是在pycharm中,重新安装了requirements.txt,它起作用了。

也许我在pycharm的配置中有一些细微的错误,这个错误是通过在pycharm中创建venv来修复的。也许是一些奇怪的Windows玩意儿。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51995170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档