我正在尝试使用SQLALchemy和pyodbc连接到SQL Server Express数据库,但我不断收到错误:
(pyodbc.Error)('IM002','[IM002] [unixODBC] [Driver Manager]数据 找不到源名称,并且未指定默认驱动程序(0) (的SQLDriverConnect)')
我真的不明白我的引擎网址是错还是其他什么。 我的方案如下:
unixodbc
和unixodbc-dev
的 Debian 图片)我的python应用程序尝试连接到... 我使用SQL Server身份验证为SQL Express配置了一个用户:
...然后:
现在...
可以从主机(我的mac)访问VM,因为a:
ping -c 3 vm-ip
成功!
但是我尝试了用户,密码,IP,服务器名称和端口的所有可能的排列:
'mssql+pyodbc://ar_user:ar_psw@vm-ip/master'
'mssql+pyodbc://ar_user:ar_psw@vm-ip:1433/master'
'mssql+pyodbc://IE10WIN8\\SQLEXPRESS'
'mssql+pyodbc://ar_user:ar_psw@IE10WIN8\\SQLEXPRESS'
'mssql+pyodbc://ar_user:ar_psw@IE10WIN8\\SQLEXPRESS:1433'
'mssql+pyodbc://ar_user:ar_psw@IE10WIN8\\SQLEXPRESS:1433/master'
......还有更多!
我总是得到“数据源未找到错误”。 我该怎么办?
ps:即使在docker容器中,vm也可以ping通!
更新(已解决但不是100%):
我这样解决了:
我以这种方式使用/etc/odbcinst.ini
配置了FreeTDS驱动程序:
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
client charset = UTF-8
和/etc/freetds/freetds.conf
:
[global]
tds version = 7.3
client charset = UTF-8
然后我使用以下字符串创建引擎:
'mssql+pyodbc://my_user:my_psw@machine_ip:1433/my_db?driver=FreeTDS'
它似乎运作正常,但我收到此警告:
SAWarning:无法识别的服务器版本信息'95 .12.255'。版 特定行为可能无法正常运作。如果使用ODBC FreeTDS,确保配置TDS_VERSION 7.0到7.3,而不是4.2 FreeTDS配置。
我还使用环境变量定义了TDS版本,但它没有解决问题...任何想法?
答案 0 :(得分:3)
我写了一篇关于如何做到这一点的教程here。基本上,您需要:
brew install unixodbc
brew install freetds --with-unixodbc
pip install pyodbc
e = create_engine("mssql+pyodbc://username:password@MY_DSN")
The walkthrough here做了更全面的解释,包括SQL Server / FreeTDS协议版本兼容性问题。
答案 1 :(得分:0)
现在可能为时已晚,但如果其他人有类似问题,可能下面的链接有一些帮助: Connecting to SQL Server from SQL Alchemy