SQLAlchemy 无法连接到 mssql 数据库

Posted

技术标签:

【中文标题】SQLAlchemy 无法连接到 mssql 数据库【英文标题】:SQLAlchemy can't connect to an mssql database 【发布时间】:2013-03-15 14:56:30 【问题描述】:

这是我的简单测试脚本。只是尝试做一个基本的选择语句。在教程中找到了基本位。

from sqlalchemy import *

db = create_engine('mssql+pyodbc://user:pass@ip_address/database_name')    

db.echo = True 
metadata = MetaData(db)

users = Table('member', metadata, autoload=True)

def run(stmt):
    rs = stmt.execute()
    for row in rs:
        print row

s = users.select(users.c.fname == 'Bill')
run(s)

经过一个小时的搜索并尝试了一些解决方案,我并没有比刚开始时更接近解决它。希望我只是在某个地方犯了一个简单的错误,但我找不到它......

这是我遇到的错误

sqlalchemy.exc.DBAPIError: (Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') None None

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

如果未在 URL 中指定,mssql+pyodbc 方言的默认驱动程序将是“SQL Server”[1]。这意味着您需要在 /etc/unixODBC/odbcinst.ini 中有一个类似这样的部分:

[SQL Server]
Driver=/path/to/library.so

它在 Windows 上“自动”运行,因为如果您打开 Administrator Tools -> Data Sources (ODBC),您很可能会找到一个名为“SQL Server "在驱动程序选项卡下。

在 Linux 上,您可以使用 FreeTDS 驱动程序,也可以使用 Microsoft 的官方驱动程序(我推荐这个)。

安装驱动后,你应该在 /etc/unixODBC/odbcinst.ini 中有这样的东西:

[FreeTDS]
Driver=/usr/lib/libtdsodbc.so
Threading=1

[ODBC Driver 11 for SQL Server]
Description=Microsoft ODBC Driver 11 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0
Threading=1
UsageCount=1

然后,您只需在 URL 中添加一个 driver 查询字符串参数,其值与部分名称匹配。

带有 FreeTDS 的示例 URL:

mssql+pyodbc://user:pass@ip_address/database_name?driver=FreeTDS

带有官方驱动程序的示例 URL:

mssql+pyodbc://user:pass@ip_address/database_name?driver=ODBC+Driver+11+for+SQL+Server

[1]https://bitbucket.org/sqlalchemy/sqlalchemy/src/aa3a8f016f3e4396d125b18b0510abdf72aa8af2/lib/sqlalchemy/dialects/mssql/pyodbc.py?at=default#cl-236

【讨论】:

+1 很好的解释。我尝试了很多不同的东西,直到我偶然发现了这一点。我的问题是我无法通过在连接字符串中添加驱动程序名称来更改代码,因为它在没有额外参数的 Windows 服务器上运行良好。所以我继续在我的/etc/odbcinst.ini 中创建另一个名为[SQL Server] 的条目,并将[SQL Server Native Client 11.0] 下的所有内容复制到我的条目中,瞧!一切正常... SQLAlchemy 即使在 Windows 上也找不到默认的 odbc 驱动程序。添加“?driver = SQL + Server”解决了我的问题。请注意,等号的名称右侧必须与您在管理工具/数据源/驱动程序下找到的驱动程序名称匹配 最新的MS驱动(v13)可以在这里找到:msdn.microsoft.com/en-us/library/hh568451%28v=sql.110%29.aspx安装驱动管理器,确保你有所有的依赖,然后安装驱动。 @Matej 使用 "?driver=SQL+Server" 的小评论在 3 小时搜索正确字符串后为我工作!为什么没有记录在案?【参考方案2】:

您收到的错误可能表明没有名为 IM002 的 DSN 设置。您是否尝试过直接测试 ODBC 连接以验证它是否设置正确?您是否安装了相应的 Microsoft SQL Server 数据库驱动程序?

【讨论】:

如何直接测试 ODBC 连接?我之前在 windows 下使用 python 脚本连接到它,只有 pyodbc,它工作正常。我也相信我的 linux 系统上存在 mssql db 驱动程序,但我可能弄错了。这是pyodbc和unixodbc吗?

以上是关于SQLAlchemy 无法连接到 mssql 数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask-SQLAlchemy 连接到 MSSQL 数据库

Flask SQLAlchemy 无法连接到数据库

无法在 Windows 机器上使用 sqlalchemy 连接到本地 mysql 数据库

无法使用 Python 连接到 MSSQL Server 数据库

AttributeError:使用flask-sqlalchemy连接到sqlite数据库时无法设置属性

Flask SQLalchemy 无法使用 Unix 套接字连接到 Google Cloud Postgresql 数据库