【问题标题】:Pyodbc on M1 MacsM1 Mac 上的 Pyodbc
【发布时间】:2021-03-31 22:22:02
【问题描述】:

我正在尝试使用 pyodbc 连接到 Microsoft sql server 数据库。我不断收到错误

错误: ('01000', "[01000] [unixODBC][Driver Manager]无法打开 lib 'ODBC Driver 17 for SQL Server' : 找不到文件 (0) (SQLDriverConnect)")

检查pyodbc.drivers() 没有结果

我按照here提供的说明安装了Microsoft ODBC驱动:

我跑了odbcinst -j,结果


DRIVERS............: /etc/odbcinst.ini 
SYSTEM DATA SOURCES: /etc/odbc.ini 
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/pawannandakishore/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

但是当我到达/etc 时,我找不到odbcinst.iniodbc.ini。他们似乎在opt/homebrew/Cellar/

我非常感谢您对此的帮助。

【问题讨论】:

  • 根据Install the Microsoft ODBC driver for SQL Server (macOS)仅 x64 架构支持 macOS 上 SQL Server 的 Microsoft ODBC 驱动程序。不支持 Apple M1。 也许在他们支持之前尝试 FreeTDS?
  • @AlwaysLearning 这实际上是错误的。官方页面说“...仅支持 x64 架构到 17.7 版。Apple M1 (ARM64) 支持从 17.8 版开始添加...”
  • @gmarais,引用在一年前写的时候是正确的。直到四个月后,微软才在July 2021 发布了适用于 SQL Server 的 ODBC 驱动程序 17.8。

标签: sql-server odbc pyodbc pymssql apple-m1


【解决方案1】:

M1 Mac 上确实不支持 ODBC 驱动程序。

但是!您可以使用pymssql 库进行连接和查询。这在我的 M1 MacBook Pro 13" 上完美运行

通过 Homebrew 安装 FreeTDS

brew install freetds

使用 pip 安装

然后使用pip(或pip3)安装pymssql

pip3 install pymssql

开始编码!

然后,只需将其导入您的代码!这是一个例子:)

import os
import pymssql

server = <your_server>
user = <username>
password = <password>

conn = pymssql.connect(server, user, password, "<your_database>")
c1 = conn.cursor()

c1.execute('SELECT * FROM <your_table>')
data = c1.fetchall()

print(data)

conn.close()

Here the docspymssql 到更多细节。

【讨论】:

  • 谢谢!是的,它适用于 pymssql
  • 请注意,您也可以将 FreeTDS 与 pyodbc 一起使用。但是您使用 pymssql 的示例也不错!
【解决方案2】:

更新:

您实际上可以在容器中使用pyodbc,但容器应该在 x86_64 拱形容器中构建和执行。为此,您需要将 platform 添加到 docker-compose.yml 或在容器运行期间(使用 docker 时)提供参数。 您需要确保使用buildx 构建容器!

码头工人:

  • docker buildx build --platform linux/amd64 -t myimage .
  • docker run --platform linux/amd64 myimage bash

Docker 撰写:

version: "3.9"

services:
  web:
    image: myimage:latest
    build:
      context: ./
    platform: linux/amd64

原答案:

pyodbc确实不支持ARM架构。我在 M1 上使用 pymssql 以连接到 MSSQL 服务器。

  1. 您需要安装系统要求freetds-dev。对于高山容器,它将是apk add freetds-dev

  2. 在 pip 要求中添加 pymssql 包。

  3. 使用简单脚本测试连接:

import pymssql
conn = pymssql.connect(server='mssql', user='SA', password='Passw@rd', database='master')
cursor = conn.cursor()
cursor.execute("""SELECT 1;""")
  1. SqlAlchemy 连接应如下所示
SQLALCHEMY_DATABASE_URI = (
    f"mssql+pymssql://{MSSQL_USER}:{MSSQL_PASSWORD}@{MSSQL_HOST}/{MSSQL_DB}?"
)

如果您需要在 M1 上运行 MSSQL 数据库 - 这是我对这个问题的回答 https://stackoverflow.com/a/66919852/11515610

相关链接:

【讨论】:

  • 如果使用 amd64 容器,性能会受到影响。使用 FreeTDS 可能会更好。
【解决方案3】:

我在我的 M1 2020 Big Sur 上试过,它可以工作

brew install unixodbc
export LDFLAGS="-L/opt/homebrew/Cellar/unixodbc/2.3.9/lib"
export CPPFLAGS="-I/opt/homebrew/Cellar/unixodbc/2.3.9/include"

如果您使用的是 pycharm,请确保 LDFLAGS 和 CPPFLAGS 设置正确

【讨论】:

    猜你喜欢
    • 2022-06-21
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2022-01-18
    相关资源
    最近更新 更多