使用 PYODBC 和使用 DSN 的 ODBC 连接连接到 Azure SQL 数据库时出错

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

我在一个项目中使用 python,在该项目中我从 Azure SQL 数据库查询数据,然后将结果写回到同一个数据库。

我使用以下代码创建 SQLAlchemy 引擎:

connection_string = 'mssql+pyodbc://user:pwd@dsn'

engine = sqlalchemy.create_engine(connection_string)

运行查询时,我收到此错误:

InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 (0) (SQLDriverConnect)') (此错误的背景位于:https://sqlalche.me/e/20/rvf5)

令我困惑的是:

  • 问题仅出现在我们的 stg 数据库上,dev 和 prd 工作正常
  • 我以为可能是密码中的特殊字符,但其他环境有相同类型的字符没有问题
  • dsn参数一致,stg dsn连接被其他软件使用,成功
  • 使用指定主机和数据库的
    connection_url = sqlalchemy.URL.create()
    方法直接适用于stg。所以可以用Python访问数据库。然而,由于我们的系统和这个项目的特定原因,我必须将上面的示例方法与 dsn 结合使用。

知道问题出在哪里吗?看起来它与 stg dsn 配置有关,但由于它看起来与其他环境相同,所以我不知道问题是什么。

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

我必须自己连接到数据库,因此我已将自己添加到该组中。运行本地 Python 应用程序时,我仍然无法使用 Azure“给我”的连接字符串登录 - 其中包含

Authentication=ActiveDirectoryIntegrated
- 所以我想我必须找出原因。

(pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
(Background on this error at: https://sqlalche.me/e/14/rvf5)

问题可能与连接字符串格式有关。您可以使用下面的连接字符串:

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)

它将成功连接到Azure SQL数据库,没有任何错误。以下是完整代码供您参考:

import urllib
import sqlalchemy
import pandas as pd

sql_query = 'SELECT  * FROM [dbo].[ticker]'
server = '<serverName>.database.windows.net'
database = '<databaseName>'
username = '<userName>'
password = '<password>'
driver = '{ODBC Driver 18 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)

对于上述代码,您将得到如下输出:

id 名字
100 股票代码 1
200 股票代码 2
300 股票代码 3
400 股票代码 4
© www.soinside.com 2019 - 2024. All rights reserved.