无法使用pyodbc连接到Azure SQL Server

时间:2018-08-01 12:50:16

标签: 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 username@mydomain.com
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)")

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

3 个答案:

答案 0 :(得分:1)

其余所有相同 运行print(pyodbc.drivers()) driver ='{SQL Server}'`尝试此解决方案。然后我可以连接AZURE SQL数据库

答案 1 :(得分:0)

我看不到Python语法有任何问题,并且不熟悉收到的错误,但是Azure文档确实表明您需要创建一条规则以允许计算机的公共IP进行连接,然后才能用Python询问任何Azure托管数据库。

您可能已经这样做了,但是由于未在问题中提及此事,因此仍然值得澄清。

Azure Firewall Rule Set Up

答案 2 :(得分:0)

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

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

https://docs.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添加到数据库防火墙中。