【问题标题】:ProgrammingError connecting to Azure using python pypyodbcProgrammingError 使用 python pypyodbc 连接到 Azure
【发布时间】:2017-06-23 10:41:02
【问题描述】:

我正在尝试使用 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' 检查了包,它显示了包括连接功能在内的全部内容。

谁能看到我遗漏了哪些关键部分?

【问题讨论】:

  • 您在 Azure 上使用了哪种类型的 mssql? Azure VM 上的 Azure SQL 数据库或 SQL Server?请尝试使用Driver={ODBC Driver 13 for SQL Server}; 而不是Driver={SQL Server};,并尝试将这些参数Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30; 添加到您当前的连接字符串中。有任何更新,请随时告诉我。
  • 昨晚我按照[页面](github.com/lionheart/django-pyodbc/wiki/…)上的说明更改并添加了一些内容。安装FreeTDS和unixodbc后,错误消息更改为操作错误:无法open lib 'SQL Server' : file not found")。当我将驱动程序更改为您建议的驱动程序时,我收到消息 Can't open lib 'ODBC Driver 13 for SQL Server' : file not found")。是不是我需要在某处更改路径以将其引导到正确的驱动程序?
  • 它是 Azure SQL DB v12
  • 好的,最后我以不同的方式修复了它。我无法让 pypyodbc 工作,所以我看了一下 pymssql 进行连接。我之前已经尝试过这个模块,但它无法安装,直到我找到this 才知道为什么。通过 Brew unlink 降级到旧版本的 FreeTDS 允许我安装 pymssql 并连接到 Azure。

标签: python sql-server azure


【解决方案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)

干杯!

【讨论】:

  • pip install pyodbc 适用于 Ubuntu,前提是您运行了此命令 sudo apt install unixodbc-dev
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多