Python怎么连Windows数据库?一篇讲清楚连接方法、配置步骤和常见坑
很多人第一次做 Python 和 Windows 数据库联动时,都会卡在这几个地方:
数据库到底是装在本机,还是局域网另一台 Windows 服务器上?
Python 要装什么驱动?
连接字符串怎么写?
为什么明明账号密码没错,就是连不上?
如果你的关键词是“python怎么连windows数据库”,那先说结论:
Python 连接 Windows 上的数据库,核心就三步:
- 先确认数据库类型,比如 MySQL、SQL Server、Access、SQLite。
- 安装对应的 Python 驱动,不同数据库用不同库。
- 写对连接参数,包括地址、端口、用户名、密码、数据库名。
下面按最常见的场景,手把手讲清楚。
一、先弄明白:Windows数据库到底指什么?
“Windows数据库”这个说法比较宽泛,实际常见的有下面几种:
- SQL Server:Windows 环境里最常见,企业和办公系统用得很多。
- MySQL / MariaDB:虽然不是 Windows 专属,但也经常装在 Windows 机器上。
- Access(.mdb / .accdb):很多老旧办公软件会用。
- SQLite:本地文件型数据库,严格说不算服务器数据库,但 Python 连接最简单。
- Oracle / PostgreSQL:也能装在 Windows 上,不过相对少一些。
所以,真正要解决“Python怎么连Windows数据库”,第一步不是写代码,而是先确认你要连的是哪一种数据库。
二、最常见的几种连接方案
方案1:Python连接 SQL Server(Windows里最常见)
如果你用的是 SQL Server,推荐用 pyodbc,这是最常用、最稳的方式。
1)安装驱动
先安装 Python 库:
pip install pyodbc
然后确认电脑上装了 SQL Server 的 ODBC 驱动。
一般建议安装:
- ODBC Driver 17 for SQL Server
- 或 ODBC Driver 18 for SQL Server
如果是 Windows 10 / 11,通常安装对应版本即可。
2)连接代码
import pyodbc
server = '127.0.0.1'
database = 'testdb'
username = 'sa'
password = '你的密码'
conn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};'
f'SERVER={server};'
f'DATABASE={database};'
f'UID={username};'
f'PWD={password}'
)
cursor = conn.cursor()
cursor.execute("SELECT @@VERSION")
row = cursor.fetchone()
print(row[0])
conn.close()
3)如果是 Windows 本机的 SQL Server 实例
有时候 SQL Server 是这种形式:
localhost.127.0.0.1电脑名\实例名
例如:
conn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=DESKTOP-ABC123\\SQLEXPRESS;'
'DATABASE=testdb;'
'Trusted_Connection=yes;'
)
这里用的是 Windows 身份验证,不需要写用户名密码。
方案2:Python连接 Windows 上的 MySQL
如果 Windows 上装的是 MySQL,最常见的库是 pymysql 或 mysql-connector-python。
方法A:用 pymysql
安装:
pip install pymysql
代码:
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
user='root',
password='你的密码',
database='testdb',
port=3306,
charset='utf8mb4'
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
result = cursor.fetchone()
print(result)
conn.close()
方法B:用 mysql-connector-python
安装:
pip install mysql-connector-python
代码:
import mysql.connector
conn = mysql.connector.connect(
host='127.0.0.1',
user='root',
password='你的密码',
database='testdb'
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
print(cursor.fetchone())
conn.close()
方案3:Python连接 Access 数据库
如果你遇到的是 .mdb 或 .accdb 文件,那大概率是 Access 数据库。
1)安装 pyodbc
pip install pyodbc
2)连接代码
import pyodbc
db_path = r'C:\Users\Public\Documents\test.accdb'
conn = pyodbc.connect(
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
rf'DBQ={db_path};'
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM 表名")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
注意
Access 连接最容易出问题的地方是:
- Python 是 64 位,Access 驱动是 32 位
- 或者反过来
位数必须匹配,不然会报驱动找不到。
方案4:Python连接 SQLite
SQLite 适合本地小项目,优点是不用装数据库服务。
1)Python自带支持,不用额外安装
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
cursor.execute("INSERT INTO users (name) VALUES (?)", ("张三",))
conn.commit()
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
conn.close()
2)适合什么场景
- 小工具
- 本地数据记录
- 单机脚本
- 测试环境
如果是多人同时访问,不建议拿 SQLite 当正式服务器数据库。
三、如果数据库装在另一台 Windows 电脑上,怎么连?
这个场景很常见。比如:
- 数据库装在 Windows 服务器上
- 你在自己电脑上用 Python 访问它
这时候不仅要写 Python 代码,还要检查网络和数据库设置。
1)先确认数据库服务开启了远程访问
以 SQL Server 为例,要确认:
- SQL Server 服务已启动
- 开启了 TCP/IP
- 允许远程连接
- 防火墙放行数据库端口
SQL Server 默认端口一般是:
- 1433
MySQL 默认端口一般是:
- 3306
2)检查 Windows 防火墙
如果防火墙没放行,局域网里也连不上。
SQL Server 放行端口思路
在 Windows 防火墙中放行:
- TCP 1433
MySQL 放行端口思路
放行:
- TCP 3306
如果你不方便配置端口,也可以先临时关闭防火墙测试。
如果关闭后能连上,问题基本就锁定在防火墙规则上。
3)测试网络是否通
在你的电脑上先测试:
ping 数据库服务器IP
如果 ping 不通:
- 先看 IP 是否写错
- 是否在同一网段
- 路由器是否限制访问
- 是否服务器禁用了 ping 响应
然后测试端口是否通:
PowerShell 可用:
Test-NetConnection 192.168.1.100 -Port 1433
如果 TcpTestSucceeded : True,说明端口通了。
四、连接数据库时最常见的报错和解决办法
1)报错:找不到驱动
常见于 SQL Server 的 pyodbc 连接。
原因
- 没装 ODBC Driver
- 驱动名字写错
- Python 位数和驱动不匹配
解决
先查看本机已安装的驱动:
import pyodbc
print(pyodbc.drivers())
然后把连接字符串里的驱动名改成列表中实际存在的名字。
2)报错:Access denied / Login failed
原因
- 用户名密码错
- 账号没权限
- SQL Server 只开了 Windows 身份验证
- 数据库名写错
解决
检查:
- 账号是否真的能登录数据库
- SQL Server 是否启用了 混合模式
- 数据库是否允许该用户访问
3)报错:Can’t connect to server / timeout
原因
- IP 写错
- 端口没开
- 防火墙拦截
- 数据库服务没启动
- 服务器没开远程访问
解决
按顺序排查:
ping服务器Test-NetConnection测端口- 检查数据库服务
- 检查防火墙
- 检查数据库是否允许远程连接
4)报错:字符乱码
原因
- 数据库编码和 Python 字符集不一致
解决
MySQL 建议写:
charset='utf8mb4'
SQL Server 一般注意使用正确的字段类型和 Nvarchar,避免中文乱码。
五、推荐你直接照抄的通用写法
如果你是新手,不知道到底怎么开始,建议按这个思路:
1)先确认数据库类型
- SQL Server
- MySQL
- Access
- SQLite
2)再安装对应库
- SQL Server:
pyodbc - MySQL:
pymysql - Access:
pyodbc - SQLite:
sqlite3(自带)
3)再写连接代码
先只做一件事:
能成功连接并执行一条简单查询。
例如:
SELECT 1
或者:
SELECT VERSION()
先验证连通,再做增删改查。
六、一个实战示例:Python连接SQL Server并查询数据
下面给你一个完整点的例子,适合直接参考。
import pyodbc
try:
conn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=127.0.0.1;'
'DATABASE=testdb;'
'UID=sa;'
'PWD=123456'
)
cursor = conn.cursor()
cursor.execute("SELECT TOP 5 * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
except Exception as e:
print("连接失败:", e)
finally:
if 'conn' in locals():
conn.close()
这个写法有几个好处:
- 有异常捕获
- 出错时能直接看到原因
- 适合调试阶段使用
七、如果你是企业环境,建议这样做
如果数据库是正式环境,不建议直接裸连,最好注意这些:
1)不要把密码写死在代码里
可以改用:
- 环境变量
- 配置文件
- 密钥管理工具
2)给数据库账号最小权限
只开放必须的权限,比如:
- 只读账号
- 只允许某个库
- 只允许某些表
3)开启备份
特别是 SQL Server、MySQL 这种正式数据库,备份一定要做:
- 全量备份
- 增量备份
- 异地备份
4)远程访问要限制来源IP
不要把数据库端口完全暴露给全网。
八、总结:Python连Windows数据库怎么选
如果你只想快速上手,可以直接按下面选:
- SQL Server:用
pyodbc - MySQL:用
pymysql - Access:用
pyodbc - SQLite:用
sqlite3
如果你连的是 Windows 上远程数据库,记住三个关键点:
- 数据库服务要开启远程访问
- 防火墙要放行端口
- Python连接字符串要写对
九、最适合新手的入门顺序
如果你现在完全是小白,建议按这个顺序练:
- 先在本机装一个 SQLite,学会连接
- 再连 MySQL 或 SQL Server
- 再练远程连接另一台 Windows 电脑上的数据库
- 最后学习事务、连接池、ORM、权限控制
这样最稳,不容易一上来就被驱动、端口、防火墙、权限这些问题劝退。
十、可直接套用的关键词思路
如果你后续要继续搜索或写相关内容,可以围绕这些词展开:
- Python 连接 SQL Server 教程
- Python 连接 MySQL 数据库 Windows
- Python 连接 Access 数据库
- Python 数据库连接失败解决方法
- Windows 远程连接数据库配置
- Python pyodbc 使用教程
- Python 数据库驱动安装方法
这些词都很适合做延伸内容,也更容易把问题讲透。
如果你要的是某一种数据库的具体连接代码,比如“Python连接SQL Server”或者“Python连接MySQL”,我可以直接给你一份可复制运行的完整示例。

还没有评论,来说两句吧...