[英]pyodbc connection to MS SQL Server running on a docker container
[英]Segfault on 2nd connection with pyodbc to mirrored MS SQL Server
我遇到了与镜像MS SQL Server DB连接的Python脚本问题。 当我第二次尝试连接到数据库时,它将引发分段错误。 应用服务器和数据库实例均在Google Compute Engine上运行。
这是一些复制该问题的代码:
import pyodbc
params = {
'autocommit': True,
'uid': 'myuser',
'tds_version': '8.0',
'DRIVER': '{mssql}',
'pwd': 'mypassword',
'server': 'sql-server-01',
'database': 'mydb',
'port': 1433,
}
c1 = pyodbc.connect(**params)
c2 = pyodbc.connect(**params)
第一个连接(c1)成功,但是第二个连接(c2)立即因段错误而失败。 “ mydb”镜像到第二台服务器(sql-server-02)。 使用非镜像数据库或禁用该数据库的镜像会使它消失。
我们已经尝试升级几个库,但是并没有解决问题。 版本:
要在此处添加,执行相同步骤的Java代码可以正常工作。
有任何想法吗?
MSODBC驱动程序有很多已知问题,尤其是在多线程方面。 听起来您好像遇到了这种情况。 我在Django的runserver中遇到了这个问题; 只有使用Django的runserver的--nothreading
选项,它才能正常工作(并且仍然存在SQLRowCount中的错误)。
幸运的是,Microsoft现在正在组建一个团队,以提供性能更好,更可靠的驱动程序(谢谢您,MS!)。 同时,我使用的是FreeTDS 0.95(它支持TDS 7.3版,即SQL Server 2008),这对我来说非常好。 试试看吗? 祝好运。
在某些版本的MS ODBC + unixODBC中,这是一个已知问题。 通过升级到unixODBC-2.3.2和最新的MS ODBC驱动程序,解决了某些Linux发行版上的问题,例如ubuntu和debian。 您可以在此处按照升级步骤进行操作: https : //blog.afoolishmanifesto.com/posts/install-and-configure-the-ms-odbc-driver-on-debian/它解决了双重连接问题-可以打开多个连接没有segfaulting。
尽管在RedHat 7.1上,相同的升级步骤对我不起作用-在同一会话中两次打开连接仍会遇到段错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.