【问题标题】:trying to connect to an azure SQL database with python / pyodbc and a raspberry pi尝试使用 python / pyodbc 和树莓派连接到 azure SQL 数据库
【发布时间】:2020-10-15 06:50:48
【问题描述】:

我尝试使用以下代码连接到 azure 数据库:

server = 'tcp:myserver.database.windows.net'
database = 'DBFREE'
username = 'user'
password = 'password'
conn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

但出现以下错误:

pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found (0) (SQLDriverConnect)")

我使用以下命令安装 pyodbc:

sudo apt-get install python-pyodbc
sudo apt-get install unixodbc-dev
pip3 install pyodbc

提前感谢

【问题讨论】:

  • 我花了一周时间尝试这里提到的所有相同链接和文章,试图让我的 Rasberry PI 连接到 Azure 数据库。他们不工作。我认为这与ARM架构有关。因此,即使 Rasberry PI OS 基于 Debian 并且 Microsoft 提供驱动程序,它们也无法正常工作。我最终使用了freetds.org

标签: raspberry-pi azure-sql-database pyodbc


【解决方案1】:

正如我在评论中提到的,我最近走这条路,永远无法让 Microsoft 的驱动程序在我的 Rasberry PI 上工作。我推测它与 ARM 架构有关。因此,即使 Rasberry PI OS 是基于 Debian 并且由 Microsoft 提供驱动程序,我也无法让它们工作。

我最终使用了FreeTDS

首先,使用以下命令进行安装:

sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc
sudo pip install pyodbc sqlalchemy

完成后,在文本编辑器中打开以下文件:

/etc/odbcinst.ini

添加以下内容:

[FreeTDS]
Description=FreeTDS Driver
Driver=/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup=/usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so

然后在python连接字符串中使用FreeTDS作为驱动,并在连接字符串末尾添加;TDS_Version=8.0

server = 'servername.database.windows.net'
database = 'database'
username = 'user'
password = 'password'
driver = 'FreeTDS'

pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password + ';TDS_Version=8.0')

【讨论】:

  • 你好,我似乎走得更远了,thanx。但是现在我收到以下错误: pyodbc.OperationalError: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)') 什么会导致这个错误?
  • @StevenNoppe 我现在记得您必须在连接字符串的末尾添加“;TDS_Version=8.0”。试试看,我会仔细检查我的并在此处更新答案。
  • 我想我发现了问题:我忘记添加我需要连接的端口!
【解决方案2】:

请在此处参考pyodbcQuickstart: Use Python to query a database in Azure SQL Database or Azure SQL Managed Instance

import pyodbc
server = '<server>.database.windows.net'
database = '<database>'
username = '<username>'
password = '<password>'   
driver= '{ODBC Driver 17 for SQL Server}'

with pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
        row = cursor.fetchone()
        while row:
            print (str(row[0]) + " " + str(row[1]))
            row = cursor.fetchone()

您没有设置 ODBC 驱动程序版本并且服务器没有前缀 tcp:

【讨论】:

  • 仍然不起作用 :( : Can't open lib 'ODBC Driver 17 for SQL Server' : 找不到文件 (0) (SQLDriverConnect)")
  • @StevenNoppe 你安装了吗?请看:docs.microsoft.com/en-us/sql/connect/python/pyodbc/…
  • 是的,但我收到一个错误:“无法找到包 msodbcsql17”在这一行:sudo ACCEPT_EULA=Y apt-get install msodbcsql17
  • @StevenNoppe,你能测试一下 ODBC 17 和 13 吗?在这里下载:docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/…
  • 如果您安装了短暂可用的 v17 msodbcsql 软件包,则应在安装 msodbcsql17 软件包之前将其删除。这样可以避免冲突。 msodbcsql17 包可以与 msodbcsql v13 包并排安装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多