通过Jupyter连接到Azure SQL Server(问题!)

时间:2019-05-14 16:17:51

标签: python azure jupyter

我正在尝试从安装了Jupyter的笔记本电脑连接到Azure SQL Server实例。在这方面还很新,但是存在一些可能很容易解决的问题。

我已经通过pip安装了64位Python 3.7,Jupyter和AMD64 v17 pyodbc。但是,当我尝试通过Jupyter进行连接时,我只是遇到连接或驱动程序问题,并不确定。

下面是我尝试运行的用于连接并返回简单的前10行查询的代码。


import pyodbc
server = 'xxxsqlserver.database.windows.net'
database = 'xxx.dbo.table'
username = 'user'
password = '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 TOP 10 * FROM xxx.dbo.table")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

以下是我收到的错误消息:


  

InterfaceError错误回溯(最近的呼叫   最后)         5密码='密码'         6 driver ='{SQL Server的ODBC驱动程序17}'   ----> 7 cnxn = pyodbc.connect('DRIVER ='+ driver +'; SERVER ='+ server +'; PORT = 1433; DATABASE ='+ database +'; UID ='+ username +'; PWD ='+   密码)         8游标= cnxn.cursor()         9 cursor.execute(“ SELECT TOP 10 * FROM xxx.dbo.table”)

     

InterfaceError :(“ IM002”,“ [IM002] [Microsoft] [ODBC驱动程序管理器]   找不到数据源名称,也未指定默认驱动程序(0)   (SQLDriverConnect)')


如果将驱动程序更改为13,则会出现其他错误


  

InterfaceError :(“ 28000”,“ [28000] [Microsoft] [用于SQL的ODBC驱动程序13   服务器[SQL Server]用户\'user \'的登录失败。 (18456)   (SQLDriverConnect); [28000] [Microsoft] [用于SQL的ODBC驱动程序13   服务器] [SQL Server]无法打开数据库请求的“ xxx.dbo.table”   登录名。登录失败。 (4060); [28000] [Microsoft] [ODBC驱动程序   13对于SQL Server]无效的连接字符串属性(0); [28000]   [Microsoft] [用于SQL Server的ODBC驱动程序13] [SQL Server]登录失败   用户\'用户\'。 (18456); [28000] [Microsoft] [用于SQL的ODBC驱动程序13   服务器] [SQL Server]无法打开数据库请求的“ xxx.dbo.table”   登录名。登录失败。 (4060); [28000] [Microsoft] [ODBC驱动程序   13 for SQL Server]无效的连接字符串属性(0)')


感觉像是驾驶员做得不太正确,或者我在某处错位。请注意,我没有安装任何版本13的驱动程序,但是确实安装了SSMS,可以将其中的一些安装进去,并且可以很好地连接到Azure平台。

有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

从外观上看你好,这可能是因为ODBC驱动程序未正确安装。这很可能是因为您没有正确设置字符串格式。因此,这是您需要执行的操作的完整列表:

  1. 安装正确的ODBC驱动程序以与SQLServer连接

这当然取决于您的操作系统,如果您使用的是MacOS,则可以像下面这样使用自制软件进行安装:

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql17 mssql-tools

如果您不知道什么是自制软件,请查看homebrew official website。如果这不是您的操作系统,请查看操作系统特定说明in this guide

  1. 完成此操作后,请确保遵循安装结束时的说明,其中它们告诉您需要对点文件进行哪些更改才能获取ODBC。工作正常。

  2. 确保正确获取连接字符串。连接字符串位于SQLServer数据库的“连接字符串”部分中,并在ODBC下:

Connection String Image

  1. 一旦有了连接字符串,请在字符串上使用fstrings或.format()函数替换字符串中Pwd={your_password_here}的部分

这应该可以解决问题。但是,如果没有,则需要检查您是否具有正确的用户名,密码和表。如果您确定它们正确无误,则可能要与支持部门联系,因为他们可能已将驱动程序要求更改为数据库的特定版本。

答案 1 :(得分:0)

在连接到Azure SQL数据库时,我也遇到了相同的错误。 将驱动程序名称从DRIVER={ODBC Driver 17 for SQL Server}更改为DRIVER={SQL Server}后,错误消失,例如:

import pyodbc
server = '<sql-server-name>.database.windows.net'
database = '<database>'
username = '<username>'
password = '<password>'
driver='{SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT TOP 10 * FROM dbo.allOrders")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()