【问题标题】:Cannot connect to the Azure SQL Server with python无法使用 python 连接到 Azure SQL Server
【发布时间】:2020-02-25 15:49:44
【问题描述】:

我多次尝试连接到 Azure SQL 数据库。

我使用了以下代码:

import pyodbc
sqlConnection = pyodbc.connect(
                " Driver={ODBC Driver 17 for SQL Server};"
                "Server=tcp:mftaccountinghost.database.windows.net,1433;"
                "Database=mft_accounting;Uid=localhost;Pwd=#####;"
                "Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;");

cursor = sqlConnection.cursor()
cursor.execute("select * from dbo.error_bills_catch")
for row in cursor:
    print(cursor)


firstColumn = row[0]


cursor.close()

sqlConnection.close()

我得到的错误如下:pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Client 无法建立连接 (0) (SQLDriverConnect)')

有人可以帮忙吗?

这是我的连接字符串:Driver={ODBC Driver 13 for SQL Server};Server=tcp:mftaccountinghost.database.windows.net,1433;Database=mft_accounting;Uid=localhost;Pwd={your_password_here};Encrypt=是;TrustServerCertificate=no;连接超时=30;

我用的是MacOs,试过几次重装驱动,还是没有结果。

谢谢。

【问题讨论】:

标签: python azure-sql-database pyodbc


【解决方案1】:

错误信息Client unable to establish connection表示网络有问题。

可能的原因如下:

  1. 错误的服务器地址。

  2. 您的本地网络问题。例如,您的本地网络可能会禁止通过端口 1433 的流量。

  3. 您的 IP 未添加到 Azure SQL 防火墙允许列表。查看教程:Use the Azure portal to manage server-level IP firewall rules


更新

我检查了我的 mac,并获得了成功。这是我的步骤:

  1. 安装 ODBC 驱动程序
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools
  1. 在python中安装pyodbc模块
pip install pyodbc
  1. 将我的 IP 添加到 Azure 门户中的允许列表

  2. 脚本:

import pyodbc

cnxn = pyodbc.connect(
    "Driver={ODBC Driver 17 for SQL Server};"
    "Server=tcp:jackdemo.database.windows.net,1433;"
    "Database=jackdemo;"
    "Uid=jack;"
    "Pwd=************;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
    "Connection Timeout=30;")

cursor = cnxn.cursor()
cursor.execute("select * from Users")
row = cursor.fetchone()
while row:
    print(str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

结果:

我成功地从表Users中获取了所有用户:

【讨论】:

  • @NikolayOleynikov 检查我的更新。我取得了成功。你可以参考我的步骤。
  • 我清理了所有驱动程序并重新安装了 brew,然后重复了您的步骤。它成功了。非常感谢你! :)
【解决方案2】:

请确保您已创建具有连接数据库权限的 SQL 登录名,因为“localhost”可能不是有效的登录名。您可以尝试创建一个包含的数据库用户,如下所示,并使用该包含的登录名连接到数据库。您是否创建了名为 localhost 的登录名?

CREATE USER yourlogin WITH PASSWORD = 'Yh-EhGFjh+';
GO
exec sp_addRoleMember 'db_datareader', 'yourlogin'; 
GO

确保您已按照this 文档中的说明创建防火墙规则,并且服务器名称和数据库名称正确(您没有拼错)。

您还应该确认您已从here 安装了推荐的 Python 驱动程序。

使用该驱动程序尝试以下代码行。

import pyodbc
server = 'mftaccountinghost.database.windows.net'
database = 'mft_accounting'
username ='TheLoginYouCreatedAbove'
password = '****'
driver= '{ODBC Driver 17 for SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+
                      ';SERVER='+server+
                      ';PORT=1433;DATABASE='+database+
                      ';UID='+username+
                      ';PWD='+ password)

cursor = cnxn.cursor()
cursor.execute("SELECT * FROM dbo.error_bills_catch")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

【讨论】:

  • 尝试了您的建议,仍然遇到同样的错误。我想我没有正确安装驱动程序,你能推荐我检查驱动程序是否正确安装的方法吗?谢谢
  • @NikolayOleynikov 我使用 Windows,在 Windows 上我们有驱动程序验证器 docs.microsoft.com/en-us/windows-hardware/drivers/devtest/… 但在 MAC 上我不知道。我从未使用过 MAC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多