Python SQLAlchemy无法连接到mssql数据库

Python SQLAlchemy无法连接到mssql数据库,python,sql-server,sqlalchemy,Python,Sql Server,Sqlalchemy,这是我的简单测试脚本。只是尝试执行一个基本的select语句。找到了教程中的基本内容 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)

这是我的简单测试脚本。只是尝试执行一个基本的select语句。找到了教程中的基本内容

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

任何帮助都将不胜感激

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

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

[SQL Server]
Driver=/path/to/library.so
[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
它在Windows上自动工作,因为如果打开管理员工具->数据源ODBC,很可能会在“驱动程序”选项卡下找到名为SQL Server的条目

在Linux上,您可以使用FreeTDS驱动程序,也可以使用Microsoft的官方驱动程序。我建议您这样做

安装驱动程序后,在/etc/unixODBC/odbcinst.ini中应该有如下内容:

[SQL Server]
Driver=/path/to/library.so
[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添加一个驱动程序查询字符串参数,其值与节名称匹配

带有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]

如何直接测试ODBC连接?我以前在windows下用python脚本连接过它,只使用pyodbc,它工作得很好。我也相信我的linux系统上有mssql db驱动程序,但我可能弄错了。这是pyodbc和unixodbc吗?+1很好的解释。我尝试了很多不同的东西,直到我偶然发现了这个。我的问题是,我无法通过在连接字符串中添加驱动程序名来更改代码,因为在没有额外参数的windows服务器上,它工作正常。因此,我继续在我的/etc/odbcinst.ini中创建了另一个名为[SQL Server]的条目,并将[SQL Server Native Client 11.0]下的所有内容复制到我的条目中,瞧!一切正常…SQLAlchemy甚至在Windows上也找不到默认的odbc驱动程序。添加?driver=SQL+Server解决了我的问题。请注意,等号右边的名称必须与管理工具/数据源/驱动程序下的驱动程序名称匹配最新的MS驱动程序v13可在此处找到:安装驱动程序管理器,确保您具有所有依赖项,然后安装驱动程序。@Matej您要使用的小注释?driver=SQL+Server在搜索正确字符串3小时后为我工作了!为什么没有记录?