当前位置:  开发笔记 > 编程语言 > 正文

通过sqlalchemy使用mssql + pyodbc从Linux连接到MS SQL Server时出错

如何解决《通过sqlalchemy使用mssql+pyodbc从Linux连接到MSSQLServer时出错》经验,为你挑选了1个好方法。

我有一个在Linux机器上运行的Python应用程序,该应用程序连接到在虚拟机内部的Windows Server中运行的MS SQL Server数据库。我有我的理由。我的应用程序进行一些大型查询并处理大量数据。它通常可以正常工作,但是每隔很多次程序就会崩溃,并显示以下内容:

python:read.c:207:tds_get_string:断言`dest_size> =(size_t)string_len'失败。

我不确定从哪里开始。没有Python堆栈跟踪。而是,该程序仅打印以上内容并终止。如果这是正常的例外情况,我可以抓住它并加以处理。

我的sqlalchemy连接字符串是:

mssql + pyodbc://用户名:密码@本地主机:1433 /数据库?驱动程序= FreeTDS

如果重要,则tsql -C给出以下输出:

编译时设置(通过“配置”脚本建立)

                        Version: freetds v0.91
         freetds.conf directory: /etc/freetds
 MS db-lib source compatibility: no
    Sybase binary compatibility: yes
                  Thread safety: yes
                  iconv library: yes
                    TDS version: 4.2
                          iODBC: no
                       unixodbc: yes
          SSPI "trusted" logins: no
                       Kerberos: yes

我的猜测是我的问题是freetds中的错误的结果。我在Linux Mint机器上通过apt-get安装了freetds和unixodbc。我通过pip安装了pyodbc,并且正在使用anaconda。我一直在尝试从源代码安装各种不同版本的freetds,unixodbc和pyodbc。到目前为止,我还没有找到一种可行的组合。但是,我真的不知道我在做什么。我正在寻找解释,想法或解决方法。或者,当然是简单而完整的解决方案。



1> jcrudy..:

我找到了一种解决方法:不要使用freetds。事实证明,有一个适用于Linux的Microsoft odbc驱动程序。我按照此处的说明进行安装。除其他外,我必须升级内核才能使其运行。安装后,我在odbcinst.ini文件中查找了一个新条目“ SQL Server的ODBC驱动程序13”。我更改了sqlalchemy连接字符串以使其匹配:

mssql + pyodbc://用户名:密码@localhost:1433 /数据库?driver = ODBC + Driver + 13 + for + SQL + Server

现在一切似乎都正常了。微软驱动程序的感觉比freetds慢得多(我实际上没有计时),但是我没有遇到以前的任何错误。

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有