微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

M1 Mac 上的 Pyodbc 更新:原答案:通过 Homebrew 安装 FreeTDS使用 pip 安装开始编码!

如何解决M1 Mac 上的 Pyodbc 更新:原答案:通过 Homebrew 安装 FreeTDS使用 pip 安装开始编码!

我正在尝试使用 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/

我真的很感激这方面的帮助。

解决方法

更新:

您实际上可以在容器中使用 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-compose:

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

相关链接:

,

确实,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 到更多详细信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?