gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:43 25 4
gpt4 key购买 nike

我有一个在 Linux 机器上运行的 Python 应用程序,它连接到在虚拟机内的 Windows Server 中运行的 MS SQL Server 数据库。我有我的理由。我的应用程序进行一些大型查询并处理大量数据。它大部分工作正常,但有时程序会因以下原因而崩溃:

python: read.c:207: tds_get_string: Assertion `dest_size >= (size_t)string_len' failed.

我不确定从哪里开始。没有 Python 堆栈跟踪。相反,该程序只是打印上面的内容并终止。如果这是一个正常的异常,我可以捕获并处理它。

我的 sqlalchemy 连接字符串是:

mssql+pyodbc://username:password@localhost:1433/database?driver=FreeTDS

如果它很重要,tsql -C 会给出以下输出:

Compile-time settings (established with the "configure" script)

                        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 中的错误引起的。我通过 apt-get 在我的 Linux Mint 机器上安装了 freetds 和 unixodbc。我通过 pip 安装了 pyodbc,我正在使用 anaconda。我一直在尝试从源代码安装各种不同版本的 freetds、unixodbc 和 pyodbc。到目前为止,我还没有找到一个完全有效的组合。但是,我真的不知道我在做什么。我正在寻找解释、想法或解决方法。或者,当然,简单而完整的解决方案。

最佳答案

我找到了一个解决方法:不要使用 freetds。事实证明,有一个适用于 Linux 的 Microsoft odbc 驱动程序。我按照说明 here安装它。我不得不升级我的内核,除此之外,让它工作。安装后,我查看了我的 odbcinst.ini 文件,发现有一个新条目“ODBC Driver 13 for SQL Server”。我更改了我的 sqlalchemy 连接字符串以匹配它:

mssql+pyodbc://username:password@localhost:1433/database?driver=ODBC+Driver+13+for+SQL+Server

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

关于python - 通过 sqlalchemy 使用 mssql+pyodbc 从 Linux 连接到 MS SQL Server 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41715657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com