繁体   English   中英

与 Microsoft azure sql 数据库的连接在本地环境中有效,但在生产中无效

[英]connection to microsoft azure sql database works in local enviornment but not in production

我正在尝试打开一个 web 服务应用程序,它允许我使用 python 代码连接到 azure 上的数据库,我尝试使用sqlalchemypyodbc ,我成功地能够连接到我机器上的数据库,在本地主机上,我可以执行我想在那里执行的所有必要操作。 但我希望能够将此代码设置为能够在 ajax 调用中命中特定路由,该调用可以对我的数据库执行某些操作,例如将用户活动标志翻转为 false。 但是问题是,当我将 python 代码上传到 azure 时,使用本指南( https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=bash&pivots=python-framework -flask ) 它只是返回一个 500 服务器错误,我在跟踪中找不到任何关于为什么它不起作用的信息,我认为这可能只是我的本地机器在数据库的 IP 地址中被列入白名单,但即使仍然如此我将该应用程序服务 IP 地址添加到允许的 IP,它仍然返回服务器错误。 这是代码的设置:

from flask import Flask
from sqlalchemy import create_engine
import pyodbc

app = Flask(__name__)

@app.route('/')
def connection():
    Driver = "{ODBC Driver 13 for SQL Server}"
    Server = "server string"
    Port = 1433
    Database = "dbname"
    Uid = "user"
    Pwd = "pass"
    
    try:
        cnxn = pyodbc.connect(f'DRIVER={Driver};SERVER={Server};DATABASE={Database};Uid={Uid};Pwd={Pwd};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;')
        cursor = cnxn.cursor()
        cursor.execute(f"SELECT * FROM (Database Table) where id = 999999999;")

    for row in cursor:
        print('row = %r' % (row,))
    return "Connection to database successful"

我省略了某些细节,但语法应该保持不变,同样,在我的本地机器上,我可以连接到数据库并返回数据。 但是一旦它编译了 azure 中的代码,它就不再有效了。

请原谅try语句。 我试图捕获错误并将其发送给客户端,希望从 500 错误中收集更多信息,但它没有用。

**编辑:值得一提的是,如果我删除了实际的连接字符串以及与连接到数据库有关的任何内容,代码将返回"connection to database successful" ,这让我相信它没有完全连接到数据库根本。 这就是它出错的原因,但问题仍然存在,为什么我可以在本地环境中连接,但不能在 azure 中连接?

您听说过 azure 中的远程调试吗?这是使用您的 Visual Studio 代码或 VS 跟踪错误的最佳工具,您的 web 或应用程序最初运行良好。 您可以使用多种方法逐行调试或逐簇调试。 请在这里查看

https://learn.microsoft.com/en-us/visualstudio/debugger/remote-debugging?view=vs-2019

所以对此的简短回答是应用程序服务缺少驱动程序{ODBC Driver 13 for SQL Server}它没有在本地出错,因为我在本地安装了该驱动程序,但该驱动程序在应用程序中不可用。 为了让它工作,我必须将应用程序安装到虚拟机才能正确下载驱动程序。

幸运的是,基于 linux 构建的 Azure web 应用程序已经附带{ODBC Driver 17 for SQL Server}因此,将驱动程序从 13 翻转到 17 允许应用程序成功连接到我的数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM