【问题标题】:Python SQLAlchemy: Data source name not found and no default driver specifiedPython SQLAlchemy:未找到数据源名称且未指定默认驱动程序
【发布时间】: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")

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

非常感谢您的帮助!

【问题讨论】:

    标签: python sql-server sqlalchemy


    【解决方案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")
    

    【讨论】:

    【解决方案3】:

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

    pip install sqlalchemy==1.4.12
    

    【讨论】:

    • 很好,谢谢。它显示在版本 1.4.16 中。我创建了an issue 来记录这一点。
    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 2013-07-24
    • 2013-09-06
    • 2018-02-13
    相关资源
    最近更新 更多