【问题标题】:Unable to connect to Azure SQL Database via Python ODBC Driver Issue无法通过 Python ODBC 驱动程序问题连接到 Azure SQL 数据库
【发布时间】:2020-05-02 04:06:11
【问题描述】:

我正在尝试连接到 azure sql 数据库。但不知何故,我不断收到以下错误:

pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]客户端无法建立连接 (0) (SQLDriverConnect)')

我已安装 ODBC 驱动程序 17。

这是我的代码:

import pyodbc
server = 'mftaccountinghost.database.windows.net'
database = 'mft_accounting'
username = 'localhost'
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.expense_zoho")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

这是我在 Azure SQL 数据库上的连接字符串

有人知道为什么会弹出错误吗?

谢谢。

【问题讨论】:

  • 您是否在 Azure SQL 防火墙上启用了从您连接的任何位置的连接?
  • 屏幕截图中的连接字符串是否适合您?如果是这样,那么为什么在 Python 代码中构建它时不包括其他连接字符串参数,例如 Encrypt=yes
  • @4c74356b41 是的,我做到了
  • @GordThompson 我使用了整个字符串,它也不起作用

标签: odbc azure-sql-database pyodbc


【解决方案1】:

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

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

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

尝试使用SSMS等数据库工具进行连接。

【讨论】:

    【解决方案2】:

    确保您已安装正确的Python SQL Driver

    请参考本教程:Quickstart: Use Python to query an Azure SQL database

    这是我的示例 pyodbc 代码,它在我的窗口中运行良好。

    import pyodbc
    server = 'sqlserverleon.database.windows.net'
    database = 'Mydatabase'
    username ='ServerAdmin'
    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 TEST6")
    row = cursor.fetchone()
    while row:
        print (str(row[0]) + " " + str(row[1]))
        row = cursor.fetchone()
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2018-10-04
      • 2011-12-21
      • 2016-06-17
      • 2021-08-11
      相关资源
      最近更新 更多