Python SQLAlchemy:未找到数据源名称且未指定默认驱动程序

Posted

技术标签:

【中文标题】Python SQLAlchemy:未找到数据源名称且未指定默认驱动程序【英文标题】:Python SQLAlchemy: Data source name not found and no default driver specified 【发布时间】:2017-05-11 16:11:23 【问题描述】:

使用 Python:使用 pyodbc 连接到 SQL Server 时,一切正常,但是当我切换到 sqlalchemy 时,连接失败,给我错误消息:

('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

我的代码:

cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER=servername;DATABASE=dbname;UID=username;PWD=password')
engine = sqlalchemy.create_engine("mssql+pyodbc://username:password@servername/dbname")

我在代码中找不到错误,不明白为什么第一个选项有效,但第二个无效。

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

也遇到了这个问题,将驱动程序查询字符串附加到我的连接路径的末尾有效:

"mssql+pyodbc://" + uname + ":" + pword + "@" + server + "/" + dbname + "?driver=SQL+Server"

更新(2021 年 7 月)- 如上所述,只是现代化(Python 3.6+):

f"mssql+pyodbc://uname:pword@server:port/dbname?driver=ODBC+Driver+17+for+SQL+Server"

注意driver=必须全部小写。

【讨论】:

这比明确切换到pymssql效果更好 我使用了所有方法进行连接,但没有成功,直到我在连接字符串的末尾使用了“?driver=SQL+Server”。感谢您的贡献。如果您能解释为什么当我们不使用您提到的特定结束字符串时它会失败,那就太好了。 像冠军一样工作。非常感谢【参考方案2】:

它使用 pymssql,而不是 pyodbc。

使用 pip 安装 pymssql,然后将代码更改为:

engine = sqlalchemy.create_engine("mssql+pymssql://username:password@servername/dbname")

【讨论】:

Pymssql 已停产:github.com/pymssql/pymssql/issues/668【参考方案3】:

很晚了,但最近我自己也遇到了同样的问题。原来这是最新的 SQLAlchemy 版本的问题。不得不将我的版本从 1.4.17 回滚到 1.4.12(不确定中间版本,只使用我知道有效的版本)。

pip install sqlalchemy==1.4.12

【讨论】:

很好,谢谢。它显示在版本 1.4.16 中。我创建了an issue 来记录这一点。

以上是关于Python SQLAlchemy:未找到数据源名称且未指定默认驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Python3+SQLAlchemy不使用字段名获取主键值教程

python SQLAlchemy

Python工具之SQLAlchemy

python+sqlalchemy 完成Oracle数据库读写操作

使用 SQLAlchemy 和 Pandas 插入数据 - Python

Flask数据库基本操作-SQLAlchemy