sql-server - 使用 SQLAlchemy 连接到 SQL Server

标签 sql-server sqlalchemy odbc pyodbc unixodbc

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

(pyodbc.Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')

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

  • 我使用的是Mac
  • 我有一个 docker 容器(基于带有 unixodbcunixodbc-devDebian 镜像)我的 python 应用程序尝试连接到...
  • 运行 Windows 8 和 SQL Express 2014 的 virtualbox 虚拟机...

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

  • 用户:ar_user
  • 密码:ar_psw

...然后:

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

现在...

可以从主机(我的 Mac)访问虚拟机,因为:

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 容器中,虚拟机也可 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: Unrecognized server version info '95.12.255'. Version specific behaviors may not function properly. If using ODBC with FreeTDS, ensure TDS_VERSION 7.0 through 7.3, not 4.2, is configured in the FreeTDS configuration.

我还使用环境变量定义了 TDS 版本,但它没有解决问题...知道吗?

最佳答案

我写了一个教程here如何做到这一点。本质上,您需要:

  1. brew 安装 unixodbc
  2. brew install freetds --with-unixodbc
  3. 将 freetds 驱动程序添加到 odbcinst.ini
  4. 将 DSN(域源名称)添加到名为“MY_DSN”的 odbc.ini
  5. pip install pyodbc
  6. e = create_engine("mssql+pyodbc://用户名:密码@MY_DSN")

The walkthrough here对此进行了更彻底的解释,包括 SQL Server/FreeTDS 协议(protocol)版本兼容性问题。

关于sql-server - 使用 SQLAlchemy 连接到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34704706/

相关文章:

sql-server - 合并 vs Sargability

用于生成列值的 SQL 语句

python - 属性错误 : type object 'User' has no attribute 'query'

mysql - 通过 ODBC 访问内存中的 sqlite 数据库

Delphi:ADOConnection、DBASE3 和字符集(错误?)

c# - 如何管理一百万条记录?

c# - 如何通过比较另一个表来显示剩余数据

python - 无法删除涉及继承模型和与 Flask-SQLAlchemy 的关系的行

python - 使用 Pylons 和 SQLalchemy 在 sqlite 中存储 UUID

r - 从 R (x64) 连接到 MS Access 数据库