M1 Mac 上的 Pyodbc
Posted
技术标签:
【中文标题】M1 Mac 上的 Pyodbc【英文标题】:Pyodbc on M1 Macs 【发布时间】: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.ini
或odbc.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。 【参考方案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 docs 从pymssql
到更多细节。
【讨论】:
谢谢!是的,它适用于 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 服务器。
您需要安装系统要求freetds-dev
。对于高山容器,它将是apk add freetds-dev
在 pip 要求中添加 pymssql
包。
使用简单脚本测试连接:
import pymssql
conn = pymssql.connect(server='mssql', user='SA', password='Passw@rd', database='master')
cursor = conn.cursor()
cursor.execute("""SELECT 1;""")
-
SqlAlchemy 连接应如下所示
SQLALCHEMY_DATABASE_URI = (
f"mssql+pymssql://MSSQL_USER:MSSQL_PASSWORD@MSSQL_HOST/MSSQL_DB?"
)
如果您需要在 M1 上运行 MSSQL 数据库 - 这是我对这个问题的回答 https://***.com/a/66919852/11515610
相关链接:
Adaptive server connection failed (DB-Lib error message 20002, severity 9)
https://docs.sqlalchemy.org/en/14/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pymssql
https://docs.microsoft.com/en-us/sql/connect/python/pymssql/step-1-configure-development-environment-for-pymssql-python-development?view=sql-server-ver15
https://pymssql.readthedocs.io/en/stable/pymssql_examples.html
【讨论】:
如果使用 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 设置正确
【讨论】:
以上是关于M1 Mac 上的 Pyodbc的主要内容,如果未能解决你的问题,请参考以下文章
Docker-compose 在 M1 mac 上的 VM (Parallels) 中
M1 Mac 上的 Pod 安装错误 - 使用 shared_preferences 等本机代码的 Flutter 项目