ProgrammingError使用python pypyodbc连接到Azure

时间:2017-02-06 13:10:26

标签: python sql-server azure

我正在尝试使用Python和pypyodbc连接到Azure(mssql服务器),但我收到一个错误消息“pypyodbc.ProgrammingError:('','SQL_ERROR')”

我已经尝试了许多不同的方法来建立连接,但每次都会出现相同的错误。例如,使用Tableau,我可以进入数据库,因此我的凭据可以正常工作。

pypyodbc.connect("DRIVER={SQL Server};server='tcp:mssql-server',Database='analytics',uid='me@analytics',pw='secret'")

pypyodbc.connect('Driver={SQL Server};Server=tcp:mssqlserver;Database=analytics;UID=me@analytics;PWD=secret')

pypyodbc.connect('Driver={SQL Server};Server=tcp:mssqlserver;Database=analytics;Uid=me@analytics;Pwd=secret;')

还有很多其他的看起来像这样,但是有不同的引用类型,不同的资本等等,但是我放在那里的凭据甚至不重要,它只是给出了编程错误,无论我做什么。我是否需要安装其他软件包以使pypyodbc工作?我使用'dir'检查了包,它显示了整个内容,包括connect函数。

任何人都可以看到我遗失的关键部分吗?

1 个答案:

答案 0 :(得分:1)

您是否安装了msodbcsqlInstall ODBC驱动程序,具体取决于您的操作系统:

对于MacOS

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap microsoft/msodbcsql https://github.com/Microsoft/homebrew-msodbcsql
brew update
brew install msodbcsql
sudo pip install pyodbc

对于Linux

sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql.list
exit
sudo apt-get update
sudo apt-get install msodbcsql mssql-tools unixodbc-dev-utf16
sudo pip install pyodbc

取消单引号,将SQL Server替换为ODBC Driver 13 for SQL,您应该这样:

pypyodbc.connect("DRIVER={ODBC Driver 13 for SQL Server};SERVER=tcp:mssqlserver;DATABASE=analytics;UID=me@analytics;PWD=secret;TrustServerCertificate=no;Connection Timeout=60")

如果出现此错误pypyodbc.OperationalError: (u'HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired'),请检查您的代码,这可能是一个错字。

我很肯定这会解决你的问题。如果没有,您可以尝试pyodbc。它的效果一样好。

import pyodbc

server = 'tcp:myserver.database.windows.net'
database = 'myDB'
username = 'username'
password = 'Secretpassword'
connectObj = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

干杯!