使用SQLAlchemy

时间:2016-01-10 11:12:13

标签: sql-server sqlalchemy odbc pyodbc unixodbc

我正在尝试使用SQLALchemy和pyodbc连接到SQL Server Express数据库,但我不断收到错误:

  

(pyodbc.Error)('IM002','[IM002] [unixODBC] [Driver Manager]数据   找不到源名称,并且未指定默认驱动程序(0)   (的SQLDriverConnect)')

我真的不明白我的引擎网址是错还是其他什么。 我的方案如下:

  • 我在 Mac
  • 我有一个 docker 容器(基于带有unixodbcunixodbc-dev Debian 图片)我的python应用程序尝试连接到...
  • 使用SQL Express 2014运行 windows 8 virtualbox 虚拟机......

我使用SQL Server身份验证为SQL Express配置了一个用户:

  • user:ar_user
  • 密码:ar_psw

...然后:

  • 我将TCP端口配置为1433并禁用动态端口(SQL Server配置管理器>网络配置>协议)。
  • 我关闭了Windows防火墙。
  • 我为运行windows8的VM
  • 使用了仅限主机的适配器

现在...

可以从主机(我的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版本,但它没有解决问题...任何想法?

2 个答案:

答案 0 :(得分:3)

我写了一篇关于如何做到这一点的教程here。基本上,您需要:

  1. brew install unixodbc
  2. brew install freetds --with-unixodbc
  3. 将freetds驱动程序添加到odbcinst.ini
  4. 将DSN(域名源)添加到名为" MY_DSN"
  5. 的odbc.ini
  6. pip install pyodbc
  7. e = create_engine("mssql+pyodbc://username:password@MY_DSN")
  8. The walkthrough here做了更全面的解释,包括SQL Server / FreeTDS协议版本兼容性问题。

答案 1 :(得分:0)

现在可能为时已晚,但如果其他人有类似问题,可能下面的链接有一些帮助: Connecting to SQL Server from SQL Alchemy