我正在尝试使用SQLALchemy和pyodbc连接到SQL Server Express数据库,但我不断收到错误:
(pyodbc.Error)('IM002','[IM002] [unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序(0)(SQLDriverConnect)')
我真的不明白我的引擎网址是错还是其他什么.我的方案如下:
我在Mac上
我有一个docker容器(基于带有和的Debian图像),我的python应用程序尝试连接到...unixodbc
unixodbc-dev
一个VirtualBox的虚拟机上运行的Windows 8与SQL Express的2014 ...
我使用SQL Server身份验证为SQL Express配置了一个用户:
user:ar_user
密码:ar_psw
...然后:
我将TCP端口配置为1433并禁用动态端口(SQL Server配置管理器>网络配置>协议).
我关闭了Windows防火墙.
我为运行windows8的VM使用了仅限主机的适配器
现在...
可以从主机(我的mac)访问VM,因为:
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一起使用,请确保在FreeTDS配置中配置TDS_VERSION 7.0到7.3,而不是4.2.
我还使用环境变量定义了TDS版本,但它没有解决问题...任何想法?