Python 使用 pymssql 连接 SQL Server 报错:DB-Lib error message 20002, severity 9

文章目录

  • 版本说明
  • 排查过程
  • 参考
  • 个人简介

版本说明

  • Python 3.8
  • SQL Server 2008
  • pymssql 2.2.11

排查过程

  • 最近给一个学妹看一个 Python 使用 pymssql 连接 SQL Server 报错问题,具体报错信息如下:
Error: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (127.0.0.1)\nDB-Lib error message 20002,
severity 9:\nAdaptive Server connection failed (127.0.0.1)\n')
  • 学妹本地使用 SQL Server 客户端是可以连接上的,但是使用代码就是连接不上,为了方便测试,我先写一个简单的测试代码:
import pymssql# 尝试连接数据库
try:# 建立连接connection = pymssql.connect('127.0.0.1','xjy_0513', '12345678', '学生住宿服务系统')# 获取游标cursor = connection.cursor()# 执行 SQL 查询或操作# 提交事务(如果有更改)connection.commit()except pymssql.Error as e:print(f"Error: {e}")
finally:# 关闭连接if connection:connection.close()
  • 考虑到目前的可能性,大致怀疑是学妹电脑网络配置的问题,然后一顿搜索这个问题,网络、字符集都尝试了还是无法解决问题,最终在一个角落看到一个可以打印详细连接过程的方式:
import pymssql
import os
os.environ['TDSDUMP'] = 'stdout' # 用于打印连接详细过程# 尝试连接数据库
try:# 建立连接connection = pymssql.connect('127.0.0.1','xjy_0513', '12345678', '学生住宿服务系统')# 获取游标cursor = connection.cursor()# 执行 SQL 查询或操作# 提交事务(如果有更改)connection.commit()except pymssql.Error as e:print(f"Error: {e}")
finally:# 关闭连接if connection:connection.close()
  • 阅读整个连接详细日志,我发现了一些关键信息,以下是截取的部分:
log.c:187:Starting log file for FreeTDS 1.4.9on 2023-12-26 22:12:39 with debug flags 0x4fff.
dblib.c:1187:tdsdbopen(00000235D7C34090, 127.0.0.1:1433, [microsoft])
dblib.c:1213:tdsdbopen: dbproc->dbopts = 00000235D7B91F60
dblib.c:1224:tdsdbopen: tds_set_server(00000235D7BAAF60, "127.0.0.1:1433")
dblib.c:251:dblib_get_tds_ctx(void)
dblib.c:1241:tdsdbopen: About to call tds_read_config_info...
config.c:170:Getting connection information for [127.0.0.1:1433].
// 貌似一个配置文件找不到 但是网上好像都没有提到过这个配置文件
config.c:174:Attempting to read conf files.
config.c:362:... $FREETDSCONF not set.  Trying $FREETDS/etc.
config.c:375:... $FREETDS not set.  Trying $HOME.
config.c:301:Could not open 'C:\Users\lenovo\AppData\Roaming/.freetds.conf' ((.freetds.conf)).
config.c:301:Could not open 'c:\freetds.conf' ((default)).
config.c:362:... $FREETDSCONF not set.  Trying $FREETDS/etc.
config.c:375:... $FREETDS not set.  Trying $HOME.
config.c:301:Could not open 'C:\Users\lenovo\AppData\Roaming/.freetds.conf' ((.freetds.conf)).
config.c:301:Could not open 'c:\freetds.conf' ((default)).
config.c:839:Setting 'dump_file' to 'stdout' from $TDSDUMP.
config.c:725:tds_config_login: client_charset is UTF-8.
config.c:734:tds_config_login: database_name is 瀛︾敓浣忓鏈嶅姟绯荤粺.
config.c:839:Setting 'dump_file' to 'stdout' from $TDSDUMP.
dblib.c:1268:tdsdbopen: Calling tds_connect_and_login(00000235D7BF2D20, 00000235D9B6AEA0)
iconv.c:371:tds_iconv_open(00000235D9B3C450, UTF-8, 1)
iconv.c:356:Using trivial iconv
iconv.c:202:local name for ISO-8859-1 is ISO-8859-1
iconv.c:202:local name for UTF-8 is UTF-8
iconv.c:202:local name for UCS-2LE is UCS-2LE
iconv.c:202:local name for UCS-2BE is UCS-2BE
iconv.c:390:setting up conversions for client charset "UTF-8"
iconv.c:392:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:431:tds_iconv_open: done
net.c:391:Connecting with protocol version 7.4
net.c:318:Connecting to 127.0.0.1 port 1433
"et.c:340:tds_setup_socket: connect(2) returned "无法立即完成一个非阻止性套接字操作。.....省略dblib.c:6088:dbfreebuf(00000235D7B91B90)
dblib.c:739:dbloginfree(00000235D7C34090)
Error: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (127.0.0.1)\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (127.0.0.1)\n')
Traceback (most recent call last):
  • 阅读 pymssql 开发文档发现,pymssql uses FreeTDS package to connect to SQL Server instances ,因此需要配置 FreeTDS:
  • 完整说明:pymssql uses FreeTDS package to connect to SQL Server instances. You have to tell it how to find your database servers. The most basic info is host name, port number, and protocol version to use.The system-wide FreeTDS configuration file is /etc/freetds.conf or C:\freetds.conf, depending upon your system. It is also possible to use a user specific configuration file, which is $HOME/.freetds.conf on Linux and %APPDATA%\.freetds.conf on Windows. Suggested contents to start with is at least:
[global]port = 1433tds version = 7.0
  • 在对应路径上添加 FreeTDS 配置文件,运行成功,再次观察运行日志正确查找到了配置文件。
log.c:187:Starting log file for FreeTDS 1.4.9on 2023-12-26 22:14:14 with debug flags 0x4fff.
dblib.c:1187:tdsdbopen(000002CC6963F000, 127.0.0.1:1433, [microsoft])
dblib.c:1213:tdsdbopen: dbproc->dbopts = 000002CC6B626980
dblib.c:1224:tdsdbopen: tds_set_server(000002CC695BBB30, "127.0.0.1:1433")
dblib.c:251:dblib_get_tds_ctx(void)
dblib.c:1241:tdsdbopen: About to call tds_read_config_info...
config.c:170:Getting connection information for [127.0.0.1:1433].
config.c:174:Attempting to read conf files.
config.c:362:... $FREETDSCONF not set.  Trying $FREETDS/etc.
config.c:375:... $FREETDS not set.  Trying $HOME.
config.c:301:Could not open 'C:\Users\lenovo\AppData\Roaming/.freetds.conf' ((.freetds.conf)).
config.c:305:Found conf file 'c:\freetds.conf' (default).
config.c:513:Looking for section global.
config.c:572:   Found section global.
config.c:575:Got a match.
config.c:598:   port = '1433'
config.c:598:   tds version = '7.0'
config.c:957:Setting tds version to 7.0 (0x700).....省略dblib.c:236:dblib_del_connection(00007FFD05304C90, 000002CC69658880)
query.c:3804:tds_disconnect()
util.c:179:Changed query state from IDLE to DEAD
mem.c:665:tds_free_all_results()
dblib.c:278:dblib_release_tds_ctx(1)
dblib.c:6088:dbfreebuf(000002CC6B6265B0)

参考

  • https://www.pymssql.org/en/v2.1.2/freetds.html#configuration

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】Linux socket 编程

一、Socket 通信过程 在 Linux 系统中&#xff0c;socket 是一种特殊的文件描述符&#xff0c;用于在网络中的不同主机间或者同一台主机中的不同进程间进行双向通信。它是通信链路的端点&#xff0c;可以看作是网络通信的接口。Socket 通信过程主要分为以下几个步骤&#xff1a…

RocketMQ5.0顺序消息设计实现

前言 顺序消息是 RocketMQ 提供的一种高级消息类型&#xff0c;支持消费者按照发送消息的先后顺序获取消息&#xff0c;从而实现业务场景中的顺序处理。 顺序消息的顺序关系通过消息组&#xff08;MessageGroup&#xff09;判定和识别&#xff0c;发送顺序消息时需要为每条消息…

RocketMQ5.0Pop消费模式

前言 RocketMQ 5.0 消费者引入了一种新的消费模式&#xff1a;Pop 消费模式&#xff0c;目的是解决 Push 消费模式的一些痛点。 RocketMQ 4.x 之前&#xff0c;消费模式分为两种&#xff1a; Pull&#xff1a;拉模式&#xff0c;消费者自行拉取消息、上报消费结果Push&#x…

C++字符串操作

1. 字符串比较 strcmp 1. 字符串比较 strcmp 头文件 string.h&#xff1b;变量需要传指针&#xff1b;返回>0 则第一个字符串比第二个字符串大&#xff0c;反之则小&#xff0c;0则表示两个字符串相同。 # include <iostream> # include <stdio.h> # include …

面试 Vue 框架八股文十问十答第一期

面试 Vue 框架八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;MVVM 的理解 MVVM (Mod…

LDD学习笔记 -- 用户空间 内核空间

LDD学习笔记 -- 用户空间 & 内核空间 内核空间用户空间用户空间和内核空间交互 操作系统上下文中User space和Kernel space概念 用户空间&#xff1a;Restricted Mode&#xff0c;用户级编程内核空间&#xff1a;Privileged Mode&#xff0c;内核级代码&#xff08;linux …

深入理解Vue生命周期钩子及其应用

Vue.js其独有的生命周期系统允许我们在组件的不同阶段执行自定义代码。在本文中&#xff0c;我们将深入探讨一个简单的Vue组件&#xff0c;通过观察其生命周期钩子的执行顺序&#xff0c;以及如何在特定时刻插入自己的逻辑。 Vue组件代码 <template><div><p&g…

华为OD机试 - 抢7游戏(Java JS Python C)

题目描述 A、B两个人玩抢7游戏,游戏规则为: A先报一个起始数字 X(10 ≤ 起始数字 ≤ 10000),B报下一个数字 Y (X - Y < 3),A再报一个数字 Z(Y - Z < 3),以此类推,直到其中一个抢到7,抢到7即为胜者; 在B赢得比赛的情况下,一共有多少种组合? 输入描述 …

分布式(8)

目录 36.什么是TCC&#xff1f; 37.分布式系统中常用的缓存方案有哪些&#xff1f; 38.分布式系统缓存的更新模式&#xff1f; 39.分布式缓存的淘汰策略&#xff1f; 40.Java中定时任务有哪些&#xff1f;如何演化的&#xff1f; 36.什么是TCC&#xff1f; TCC&#xff08…

Spring 事务实现

Spring 事务实现 Spring 事务使用 Transactional注解配置项事务传播行为PROPAGATION_REQUIRED当前方法必须在事务中&#xff0c;没有就创建&#xff0c;有就加入。PROPAGATION_SUPPORTS有事务就加入&#xff0c;没有就以非事务方式执行。PROPAGATION_MANDATORY有事务就加入&a…

【算法挨揍日记】day41——【模板】01背包、416. 分割等和子集

【模板】01背包_牛客题霸_牛客网你有一个背包&#xff0c;最多能容纳的体积是V。 现在有n个物品&#xff0c;第i个物品的体积为 ,。题目来自【牛客题霸】https://www.nowcoder.com/practice/fd55637d3f24484e96dad9e992d3f62e?tpId230&tqId2032484&ru/exam/oj&qru…

Flutter基础

一、关键字 class&#xff1a;用于定义一个新的类&#xff1b; extends: 用于指定一个类继承另一个类&#xff1b; mixin: 用于将一个类的代码片段添加到另一个类中&#xff0c;实现代码复用&#xff1b; abstract: 用于声明一个抽象类或抽象方法&#xff0c;不能直接实例化&a…

C++ map容器

通俗一点讲map其实就是python的字典(学会python字典 c_map)!!! map和unordered_map都是C中的关联容器&#xff0c;用于存储键值对。其主要区别在于底层实现方式和性能表现。 1、底层实现方式   map内部使用红黑树&#xff08;一种自平衡二叉查找树&#xff09;来实现&…

HarmonyOS-ArkTS基本语法及声明式UI描述

初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在学习ArkTS语言之前&#xff0c;建议开发者具备TS语…

机器学习常用算法模型总结

文章目录 1.基础篇&#xff1a;了解机器学习1.1 什么是机器学习1.2 机器学习的场景1.2.1 模式识别1.2.2 数据挖掘1.2.3 统计学习1.2.4 自然语言处理1.2.5 计算机视觉1.2.6 语音识别 1.3 机器学习与深度学习1.4 机器学习和人工智能1.5 机器学习的数学基础特征值和特征向量的定义…

Shell 文本处理常用命令

1、Sed sed 即 Stream EDitor&#xff0c;和 vi 不同&#xff0c;sed是基于行的文本编辑器。 Sed是从文件或管道中读取一行&#xff0c;处理一行&#xff0c;输出一行&#xff1b;再读取一行&#xff0c;再处理一行&#xff0c;再输出一行&#xff0c;直到最后一行。 # 查看文…

软件测试/测试开发丨Python 模块与包

python 模块与包 python 模块 项目目录结构 组成 package包module模块function方法 模块定义 定义 包含python定义和语句的文件.py文件作为脚本运行 导入模块 import 模块名from <模块名> import <方法 | 变量 | 类>from <模块名> import * 注意&a…

小红书如何高效引流?

近年来&#xff0c;公域流量价格不断上涨&#xff0c;私域流量的优势逐渐凸显。企业正花费大量资源和成本来获取新流量&#xff0c;但与其如此&#xff0c;不如将精力放在留存和复购上&#xff0c;从而实现业绩的新增长。其中关键在于如何有效地将公域流量转化为私域流量。 然而…

c++期末考题笔试来咯

最后一道大题题目再现 写一个person类&#xff0c;有姓名&#xff0c;性别&#xff0c;年龄。然后在此基础上派生出教师类和学生类。教师类增加了以下数据&#xff1a;工号&#xff0c;职称&#xff0c;工资。学生类增加了以下数据成员&#xff1a;学号&#xff0c;专业&#…

JVM调优相关参数学习

Xms 是指设定程序启动时占用内存大小。一般来讲&#xff0c;大点&#xff0c;程序会启动的快一点&#xff0c;但是也可能会导致机器暂时间变慢。 Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存&#xff0c;超出了这个设置值&#xff0c;就会抛…