Python 使用 pyodbc 连接 SQL Server 数据库操作指南

橘子海
橘子海
发布时间:2026-10-12 | 2人浏览过
原创

本文详细介绍如何利用 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)

Windows控制面板中查看ODBC数据源驱动列表的界面截图
数据源(ODBC)对话框内显示已安装的具体驱动名称与版本

也可在 Python 交互环境中动态打印当前可用驱动,以便后续编写连接字符串:

import pyodbc
print(pyodbc.drivers())

第2步:安装 pyodbc 库

推荐使用官方包管理器获取编译好的二进制文件,可自动适配对应平台的 C 语言依赖:

pip install pyodbc
命令行执行pip install命令后的成功提示信息
Pip 安装日志输出显示请求的依赖已被满足

安装完成后运行 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 配置的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表