我正在尝试从安装了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平台。
有什么想法吗?
谢谢。
答案 0 :(得分:0)
从外观上看你好,这可能是因为ODBC驱动程序未正确安装。这很可能是因为您没有正确设置字符串格式。因此,这是您需要执行的操作的完整列表:
这当然取决于您的操作系统,如果您使用的是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。
完成此操作后,请确保遵循安装结束时的说明,其中它们告诉您需要对点文件进行哪些更改才能获取ODBC。工作正常。
确保正确获取连接字符串。连接字符串位于SQLServer数据库的“连接字符串”部分中,并在ODBC下:
.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()