无法让sql server与django azure web app一起使用

时间:2017-04-27 14:28:17

标签: django python-3.x azure azure-sql-database azure-web-sites

我已经尝试了3天了,无法让它发挥作用。我正在从microsoft docs:https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-python-create-deploy-django-app

中学习本教程

编辑:我使用的是Windows命令行选项,而不是Visual Studio。我按照教程的建议在天蓝色市场中开始使用PTVS python / django模板。

该应用程序适用于sql lite,但当我将其更改为sql server时,它将停止使用以下错误:

django.core.exceptions.ImproperlyConfigured: 'sql_server.pyodbc' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
    'mysql', 'oracle', 'postgresql', 'sqlite3'
Error was: No module named 'sql_server'
2017-04-27 04:34:34.525084: wfastcgi.py 2.1.1 closed

该应用程序通过连接到相同的远程sql azure db在本地工作,所以问题肯定是天蓝色的。我在本地得到了同样的错误,直到我安装了pyodbc-azure(https://github.com/michiya/django-pyodbc-azure)。根据Microsoft文档和库文档的建议,以下是settings.py中的数据库连接规范:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'django-myorg',
        'USER': 'riz',
        'PASSWORD': '#######',
        'HOST': 'django-myorg.database.windows.net',
        'PORT': '',

        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
        },
    },
}

这是我的第三次尝试设置,我对微软缺乏最新文档感到沮丧。

我已尝试按照本指南进行故障排除:https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-python-configure。我已经尝试为所有必需的库构建轮子,但仍然有同样的问题。我有一种感觉,它是Azure无法使用pip获得的pyodbc库之一。

更新: 我删除了默认包含在azure为django提供的PTVS模板中的.skipPythonDepolyment。这促使azure实际尝试并安装requirements.txt中列出的库。根据pip.log:

这是最新的错误
running build

running build_ext

building 'pyodbc' extension

error: Unable to find vcvarsall.bat

这似乎是试图构建pyodbc但失败了。不知道在这一点上我能做些什么。

1 个答案:

答案 0 :(得分:2)

我有类似的设置,并花了很多个月了解如何让Django在Azure上工作。您应该事先知道一些事情,因为它们可以帮助您解决问题:

Python版

我在web.config文件中遇到了一些问题,因为看起来Django应用程序没有使用“runtime.txt”中指定的Python版本加载,就像他们说的那样。它们默认使用2.7。要使用Python 3.4运行Django,您需要手动将web.config文件替换为您想要的版本,并确保它指定正确版本的Django。我相信默认的Django应用程序附带了三个web.config文件,一个用于2.7,一个用于3.4,一个标题为web.config。尝试将3.4一个复制到web.config,这是Azure实际使用的唯一文件。

从轮子安装Pip

您需要从轮子安装许多库,其中大部分都可以在http://www.lfd.uci.edu/~gohlke/pythonlibs/找到。请注意,您需要在Azure上使用Python 3.4,32位版本(除非您更改了默认的python和环境),此外,您需要将中间标记替换为none,否则它将会中断天青:

numpy‑1.13.1+mkl‑cp34‑cp34m‑win32.whl更改为numpy‑1.13.1+mkl‑cp34‑none‑win32.whl

为了简化从轮子的安装,我在Azure上的应用程序根文件夹中添加了一个wheelhouse文件夹,并将我的轮子移到那里。然后在requirements.txt中,我指向我要安装的那个驾驶室中的确切车轮文件。

Django版

django-pyodbc-azure是必需的,根据我的经验,最新版本适用于Django 1.11。但是,如果我没记错的话,市场上的默认Django应用只会在django文件中显示requirements.txt,因此如果在成功安装django-pyodbc-azure后遇到连接问题,请尝试指定Django的版本。我使用以下内容并且有效:

django>=1.11.1,<1.12
pyodbc from wheel
D:\home\site\wwwroot\wheelhouse\pyodbc-4.0.16-cp34-none-win32.whl
django-pyodbc-azure==1.11.0

检查你的pip构建输出,以确保它正在重新安装正确版本的Django,如果你还没有1.11。我建议你在你的需求文件中指定django在你准备好之前不应该更新到1.12,否则它可能会在下一个版本发布时更新,这会破坏与django-pyodbc-azure的连接。

数据库连接

我的数据库连接有点不同。如果您使用的是Azure SQL数据库,请尝试下列办法中的一个或多个:

  • 指定端口1433
  • 在数据库主机前添加tcp:,例如tcp:django-myorg.database.windows.net - 并确保您的SQL服务器实际上名为django-myorg,这与您的数据库名称是分开的
  • 尝试将您的驱动程序更改为SQL Server Native Client 11.0

如果它们在您的计算机上运行,​​很可能您的设置很好,问题在于构建所需的模块 - 但以防万一。

并且有心,这花了我几个月的时间来建立 - 这个过程肯定会变得更容易。