SQLAlchemy无法连接到mssql数据库

32 投票
2 回答
24002 浏览
提问于 2025-04-17 20:16

这是我写的一个简单测试脚本。我只是想做一个基本的选择语句。在一个教程上找到了基本的内容。

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 个回答

1

你遇到的这个错误可能是因为没有设置名为 IM002 的数据源名称(DSN)。你有没有直接测试一下 ODBC 连接,看看它是否设置正确?你是否安装了合适的 Microsoft SQL Server 数据库驱动程序?

35

如果在网址中没有指定,mssql+pyodbc 这个连接方式的默认驱动是“SQL Server” [1]。这意味着你需要在 /etc/unixODBC/odbcinst.ini 文件中有一段像这样的内容:

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

在Windows上,这个过程是“自动”的,因为如果你打开 管理员工具 -> 数据源 (ODBC),你很可能会在 驱动程序 标签下找到一个叫“SQL Server”的条目。

在Linux上,你可以使用FreeTDS驱动,或者使用微软的官方驱动(我推荐这个)。

安装完驱动后,你应该在 /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 查询字符串参数,值要和上面那段内容的名称一致。

使用FreeTDS的示例网址:

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

使用官方驱动的示例网址:

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

撰写回答