【问题标题】:Django 2.1 SQL Server 17 error - isn't an available database backend. Try using 'django.db.backends.XXX'Django 2.1 SQL Server 17 错误 - 不是可用的数据库后端。尝试使用'django.db.backends.XXX'
【发布时间】:2019-01-30 09:16:15
【问题描述】:
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'

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

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 中使用它。

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

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

    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()

【问题讨论】:

    标签: pyodbc python-3.7 django-pyodbc django-pyodbc-azure django-2.1


    【解决方案1】:

    只要在您当前的 virtualenv 中安装了 django-pyodbc-azure,这是一个经过验证的完整设置:

    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/

    【讨论】:

    • 即使使用此设置,我也会遇到同样的错误。 django.core.exceptions.ImproperlyConfigured: 'sql_server.pyodbc' 不是可用的数据库后端。尝试使用 'django.db.backends.XXX',其中 XXX 是以下之一:'mysql'、'oracle'、'postgresql'、'sqlite3'
    • 我尝试添加 'INSTALLED_APPS' 'django-pyodbc-azure' 但现在出现不同的错误 - ModuleNotFoundError: No module named 'django-pyodbc-azure'
    • 更新:我添加了 'INSTALLED_APPS': 'sql_server' 和 'pyodbc' 并进入下一步/错误:所以看起来它现在正在尝试访问数据库。用户被设置为此数据库的管理员/所有访问用户,所以我不确定缺少什么...django.db.utils.InterfaceError: ('28000', '[28000] [Microsoft][ODBC Driver 17 SQL Server][SQL Server]用户\'project_user\'登录失败。(18456);无法打开登录请求的数据库“db-test”。登录失败。(4060);[28000][Microsoft][ ODBC Driver 17 for SQL Server]无效的连接字符串属性 (0)')
    • 您使用的是virtualenv吗?听起来好像在您的PYTHON_PATH 中找不到它。如果您的virtualenv 设置正确,则不必将它们添加到INSTALLED_APPS。您现在遇到的错误是因为您使用了错误的凭据(在示例中提供)......但我仍然会检查您的路径和 virtualenv。进展顺利!
    • 我得到了这个工作。有没有办法运行一些 sql 存储过程而不是使用 ORM 模型映射?这样做可以吗,还是不推荐?
    【解决方案2】:

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

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

    也许我在 pycharm 配置中遇到了一些细微的错误,通过在 pycharm 中创建了一个 venv 以某种方式修复了该错误。也许是一些奇怪的 Windows 东西。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2019-07-16
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2015-12-11
      • 2013-02-15
      相关资源
      最近更新 更多