【问题标题】:install odbc driver to azure app service将 odbc 驱动程序安装到 azure 应用服务
【发布时间】:2018-04-19 16:40:45
【问题描述】:

我正在 Azure 应用服务中运行一个简单的 Python Web 应用,它需要访问 Azure SQL 数据库。为了从 python 查询 Azure SQL 数据库,需要安装 ODBC 驱动程序。我已经在我的本地机器上完成了这项工作,并且效果很好。 如何在运行我的应用程序的 Azure 机器上安装 ODBC 驱动程序,或者如果有必要的话?

【问题讨论】:

  • 您好,您的本地机器系统是什么?窗户?
  • 是的,是Windows

标签: python azure odbc


【解决方案1】:

根据我的经验,Azure Web App Service Runtime 是 Windows 系统。这不需要重新加载驱动程序。

我尝试在我的烧瓶网络应用中访问 Azure SQL 数据库。

你可以参考我的工作代码。

view.py

from datetime import datetime
from flask import render_template
from jaygongflask import app
import pyodbc

@app.route('/database')
def database():
    """Renders the about page."""
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=***.database.windows.net;DATABASE=***;UID=***;PWD=***')
    cursor = cnxn.cursor()
    cursor.execute("select * from dbo.Student")
    row = cursor.fetchall()
    #for r in row:
     #   print r
    return render_template(
        'database.html',
        title='Database',
        year=datetime.now().year,
        message='Database query result.',
        queryResult = row
    )

安装 pyodbc 包

在这里,我使用 python361x64 扩展。所以我在 KUDU 中运行命令python -m pip install pyodbc

获取查询结果

访问网址http://***.azurewebsites.net/database

希望对您有所帮助。如有任何疑问,请告诉我。


更新答案:

web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="jaygongflask.app"/>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

更新答案 2:

我的网络应用程序使用 python361x64 扩展。请参考我做的步骤如下:

第 1 步:创建 azure web 应用并添加扩展(这里是 Python 3.6.1 x64)

第 2 步:发布您的 flask 项目并添加 web.config

web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="<Your Project Name>.app"/>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

第三步:切换到 Kudu CMD 和命令cd Python361x64touch get-pip.py 并通过编辑按钮将url https://bootstrap.pypa.io/get-pip.py 的内容复制到get-pip.py 中,然后运行python get-pip.py 以安装pip 工具。

第 4 步:通过 python -m pip install pyodbc 安装 pyodbc 包或您需要的任何包

更多部署细节,请参考这个tutorial

【讨论】:

  • 哇,太酷了,谢谢!如果可行,则意味着我的应用程序的问题不在于驱动程序的缺席,而在于其他地方。我希望我有办法在天蓝色的某个地方查看我的应用程序日志,你知道是否有吗?我已经在 App 服务设置中切换了日志,它会生成一个 log.txt 文件,可以在 Kudu 中访问该文件。但是只有服务器日志,没有我习惯在 Python 中看到的日志。
  • @IlyaPukhov 嗨,很抱歉回复晚了。我建议您使用应用程序诊断来检查应用程序日志。请参考本页:docs.microsoft.com/en-us/azure/app-service/….
  • @IlyaPukhov 嗨,现在有进展吗?
  • 我坚持这一点。这是我的连接字符串和所有:server = os.environ['SERVER'] database = os.environ['DATABASE'] username = os.environ['DBUSERNAME'] password = os.environ['PASSWORD'] driver= '{ODBC Driver 13 for SQL Server}' cnxn = pyodbc.connect('DRIVER='+driver+';PORT=1433;SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+ password) cursor = cnxn.cursor() cursor.execute("select top(1) * from faces") row = cursor.fetchall() 它在本地机器上工作,但当被推到天蓝色时它说:
  • " 内部服务器错误 服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序出错。"
【解决方案2】:

很遗憾,您无法在 Azure 应用服务上安装自定义驱动程序。为此,您需要 IaaS 产品。这个问题已经被here问过了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多