无法使用 python 连接到 Azure SQL 服务器

Cannot connect to the Azure SQL Server with python

我尝试了几次连接到 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()

我得到的错误是 following:pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection (0) (SQLDriverConnect)')

有人可以帮忙吗?

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

我用MacOs,试了几次重装驱动,还是没有效果。

谢谢。

请确保您已经创建了一个 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()

错误消息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
  2. 中安装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()

结果:

我成功获得了来自 table 个用户的所有用户: