python - 无法使用 pyodbc 连接到 Azure SQL Server

标签 python sql-server azure anaconda pyodbc

恐怕还有一篇关于 Python 的 Azure SQL Server 连接问题的文章。我已经浏览过此网站、Microsoft 网站以及通过 Google 提供的其他链接上的多个线程,但我无法使其正常工作。

我使用的是最新版本的 Anaconda (Python 3.6.6),并安装了 ODBC 驱动程序版本 17.2.0.1。

使用以下脚本:

import pyodbc

server = server = 'myserver.database.windows.net,1433' #also tried prepending tcp:....
database = 'db1' #not the real db name
username = 'username@myserver' #also tried <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="483d3b2d3a2629252d0825312c2725292126662b2725" rel="noreferrer noopener nofollow">[email protected]</a>
password = '123456' #obviously not my real password!
driver= '{ODBC Driver 17 for SQL Server}' #also tried v13 ODBC driver and 'SQL Server' here

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

cursor = cnxn.cursor()

我收到以下错误:

Error: ('IM004', "[IM004] [Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed (0) (SQLDriverConnect)")

有人可以提供任何见解吗?

最佳答案

我知道这个答案有点晚了,但以防万一其他人需要帮助。

Azure 官方文档显示的参数与实际需要的参数不同:

https://learn.microsoft.com/en-us/sql/connect/python/pyodbc/step-3-proof-of-concept-connecting-to-sql-using-pyodbc?view=sql-server-2017

对我有用的解决方案是访问我的 Azure 仪表板中数据库门户中的连接字符串。

如果您导航到您尝试连接的数据库实例并选择概述: enter image description here

然后在右侧您应该找到连接字符串: enter image description here

然后您应该能够选择 ODBC 连接字符串,该字符串只需要您替换密码: enter image description here

我怀疑让大多数人困惑的是选择合适的驱动程序。正如您在此字符串和 pyodbc 文档中看到的,您必须根据数据库运行的内容指定要使用的驱动程序:

https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows

这个解决方案第一次对我有效,前提是我已将我的 IP 添加到数据库防火墙。

关于python - 无法使用 pyodbc 连接到 Azure SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51633759/

相关文章:

node.js - 如何使用 AMQP 以 "PeekLock"模式从 Azure 服务总线队列获取消息?

Azure Functions V4 NET 6 服务总线触发器未触发

python - 打开 CV Python- 图像失真径向和透视-

Python - 如何访问第一类数据

sql - WITH 公用表表达式与 CREATE VIEW 性能

sql-server - SSISDB 错误成功报告

python - 如何从时间戳中减去充满日期的 pandas.core.series.Series ,以找到每行日期与该时间戳日期的差异?

python - 使用 Selenium Webdriver 在元素中查找元素

sql - 如何列出 SQL Server 表的主键?

azure - 当 Kusto 中的数据存在间隙时,仅使用连续数据集并切断数据