在 M1 mac 上使用 Python 中的 SQLAlchemy 连接到 Azure 数据库

问题描述 投票:0回答:1

我正在尝试连接到 Azure SQL Server 数据库,但我不断收到此错误:

(pyodbc.InterfaceError) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found and no default driver specified (0) (SQLDriverConnect)')

我正在使用此代码片段来尝试连接:

params = urllib.parse.quote_plus
('Driver={ODBC Driver 18 for SQL Server};Server=tcp:test-server.database.windows.net,1433;Database=test-database;Uid=*****;Pwd=*****;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;')
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine_azure = create_engine(conn_str,echo=True)
connection = engine_azure.connect()

我尝试将驱动程序更改为“SQL Server”和驱动程序文件路径“/opt/homebrew/lib/libmsodbcsql.18.dylib”。这些都不起作用。

我可以使用 pyodbc.connect() 函数进行连接,所以我知道我的连接字符串是正确的。

在 /opt/homebrew/etc/ 文件夹中,我有空的 odbc.ini 文件和 odbcinst.ini 文件,如下所示:

[ODBC Driver 18 for SQL Server]
Description=Microsoft ODBC Driver 18 for SQL Server
Driver=/opt/homebrew/lib/libmsodbcsql.18.dylib
UsageCount=1

odbcinst -j 给出:

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

我为 odbc.ini 和 odbcinst.ini 文件创建了从 /etc/ 文件夹到 /opt/homebrew/etc/ 文件夹的快捷方式。奇怪的是,ODBCDataSources 和 .odbc.ini 文件不存在。我尝试使用

brew install msodbcsql18 mssql-tools18
卸载并重新安装驱动程序,但似乎没有任何效果。任何帮助将不胜感激。谢谢!

sql-server azure sqlalchemy azure-sql-database
1个回答
0
投票

您可以尝试使用下面的代码来使用 SQL Alchemy 连接到 Azure SQL 数据库:

import urllib
import sqlalchemy
import pandas as pd

sql_query = 'SELECT * FROM [dbo].[<tableName>]'
server = '<serverName>.database.windows.net'
database = '<databaseName>'
username = '<userName>'
password = '<password>'
driver = '{ODBC Driver 17 for SQL Server}'
odbc_str = 'DRIVER='+driver+';SERVER='+server+';PORT=1433;UID='+username+';DATABASE='+ database + ';PWD='+ password
connect_str = 'mssql+pyodbc:///?odbc_connect=' + urllib.parse.quote_plus(odbc_str)
engine = sqlalchemy.create_engine(connect_str)
df = pd.read_sql(sql_query, engine)
print(df)

这将成功连接到数据库,没有任何错误。

enter image description here

关于以下错误:

(pyodbc.InterfaceError) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found and no default driver specified (0) (SQLDriverConnect)')

检查 odbc.ini 和 odbcinst.ini 文件的位置。如果文件位于

/usr/local/etc/
位置,则将它们复制到 /etc/ 位置。使用以下命令复制文件:

$ cp /usr/local/etc/odbc.ini /etc/odbc.ini  
$ cp /usr/local/etc/odbcinst.ini /etc/odbcinst.ini

这可能会解决问题。更多信息,您可以参考这个

© www.soinside.com 2019 - 2024. All rights reserved.