Python 使用 pyodbc 连接 SQL Server 数据库操作指南
本文详细介绍如何利用 Python 的 pyodbc 模块结合 ODBC 驱动程序连接 SQL Server 数据库。内容涵盖系统驱动核查、环境安装、连接参数配置、核心方法封装以及增删改查实操步骤,提供稳定且不易出现中文乱码的数据库交互方案。
准备环境与依赖
Windows 环境下 Python 无法直接调用微软原生驱动,需依靠系统层的 ODBC(Open Database Connectivity)中间件完成通信。pyodbc 是该场景下最常用的轻量级扩展包,其核心对象包含:
Connection:维护客户端与数据库的网络会话,负责事务提交与断开。Cursor:承载发送 SQL 语句并接收返回游标的通道。Row:以结构化元组形式缓存查询结果集。
第1步:确认 ODBC 驱动程序版本
操作前必须核对本机已安装的 SQL Server ODBC 驱动名称。不同系统镜像或 SQL Server 实例预装的驱动编号可能不同(如 11、17、18 等)。可通过以下路径查看:
控制面板 → 管理工具 → 数据源(ODBC)

也可在 Python 交互环境中动态打印当前可用驱动,以便后续编写连接字符串:
import pyodbc
print(pyodbc.drivers())
第2步:安装 pyodbc 库
推荐使用官方包管理器获取编译好的二进制文件,可自动适配对应平台的 C 语言依赖:
pip install pyodbc

安装完成后运行 pip list 检索到 pyodbc 条目即表示环境就绪。
封装数据库连接类
为避免重复编写连接逻辑,通常将基础操作封装为独立模块。下方提供标准模板,连接字符串中的 Driver 字段需替换为第一步核实的实际名称:
# DBHelp_SqlServer.py
import pyodbc
class MSSQL:
def __init__(self, IP, UserID, Pwd, db):
self.host = IP
self.user = UserID
self.password = Pwd
self.dbname = db
def __get_connect(self):
if not self.dbname:
raise NameError("db name undefine error")
else:
# 请将示例中的驱动名替换为实际电脑上的 ODBC 驱动名称
conn_str = "Driver={ODBC Driver 11 for SQL Server};SERVER=%s,1433;DATABASE=%s;UID=%s;PWD=%s" % (
self.host, self.dbname, self.user, self.password
)
self.conn = pyodbc.connect(conn_str)
cursor = self.conn.cursor()
if not cursor:
raise NameError("db connect error")
else:
return cursor
def ExecuteTableQuery(self, selectSql):
cu = self.__get_connect()
res = cu.execute(selectSql).fetchall()
self.conn.close()
return res
def ExecuteNonQuery(self, sql):
cu = self.__get_connect()
cu.execute(sql)
self.conn.commit()
self.conn.close()
def PrintODBCDrivers(self):
print(pyodbc.drivers())
测试数据读写
新建测试脚本调用封装类,验证网络连通性与 SQL 语法解析是否正常:
# testConn.py
import DBHelp_SqlServer
db = DBHelp_SqlServer.MSSQL(
IP="127.0.0.1",
UserID="sa",
Pwd="YourPassword",
db="TestDB"
)
sql_insert = "INSERT INTO TeacherTable(TName,TClass) VALUES('吕老师','三年级')"
db.ExecuteNonQuery(sql=sql_insert)
sql_select = "SELECT * FROM TeacherTable"
data = db.ExecuteTableQuery(selectSql=sql_select)
for row in data:
print(row)
执行后终端打印出预期数据列表或插入无报错退出,即代表数据库链路畅通。相比早期的 pymssql 方案,pyodbc 基于底层 ODBC API 映射,通常在处理多字节字符集时表现更稳定,极少出现中文乱码或截断现象。
注意事项
- 连接字符串中的端口默认使用
1433,若服务器配置为动态端口或命名实例,需在 SERVER 参数后追加,PORT_NUMBER。 - 生产环境建议开启连接池或控制
commit()频率,防止大量事务堆积占用服务器资源。 - 若抛出
[Microsoft][ODBC Driver Manager] Data source name not found错误,请重新核对 Driver 括号内的字符串是否与系统面板显示完全一致,包括空格与大小写。
以上就是 Python 利用 pyodbc 高效连接 SQL Server 数据库的详细内容,更多关于 Python 数据库交互与 ODBC 配置的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













