SQLAlchemy无法连接到mssql数据库。

32

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

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

非常感谢任何帮助!

2个回答

34
如果URL中没有指定,mssql+pyodbc方言的默认驱动程序将为"SQL Server" [1]。这意味着您需要在/etc/unixODBC/odbcinst.ini中拥有一个类似于以下内容的部分:
[SQL Server]
Driver=/path/to/library.so

在Windows上,它可以“自动”运行,因为如果您打开管理员工具 -> 数据源(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
然后,您只需将driver查询字符串参数添加到URL中,并将其值设置为与部分名称匹配。
使用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] 下的所有内容复制到我的条目中,嗯! 一切都运行正常... - Karthic Raghupathi
4
SQLAlchemy在Windows上找不到默认的ODBC驱动程序。添加"? driver = SQL + Server"解决了我的问题。请注意,等号右侧的名称必须与在管理工具/数据源/驱动程序下找到的驱动程序名称匹配。 - Matej
最新的 MS 驱动程序(v13)可以在此处找到:https://msdn.microsoft.com/zh-cn/library/hh568451(v=sql.110).aspx 安装驱动程序管理器,确保您拥有所有依赖项,然后安装驱动程序。 - iled
1
@Matej,你的小建议使用“?driver=SQL+Server”在我搜索了3个小时后终于奏效了!为什么这个没有被记录下来呢? - whytheq

1
您收到的错误可能表示没有使用名称IM002设置DSN。您是否尝试直接测试ODBC连接以验证其是否正确设置?您是否安装了适当的Microsoft SQL Server数据库驱动程序?

1
我该如何直接测试ODBC连接?在Windows下,我以前用Python脚本通过pyodbc成功连接过。我也相信mssql数据库驱动程序在我的Linux系统上是存在的,但我可能弄错了。这个驱动是指pyodbc和unixodbc吗? - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接