Python小项目:从环境搭建到封装使用(每次从这里开始)
Python小项目从环境搭建到封装使用每次从这里开始在Python项目中操作MySQL是家常便饭但很多新手容易陷入“到处写连接、反复敲cursor.execute()”的泥潭。本文将从零开始带你完成一个整洁、可复用的MySQL操作项目涵盖环境检查、虚拟环境、依赖安装、数据库封装以及完整示例让你轻松上手。一、先检查Python是否安装在开始任何操作前确认系统已安装Python推荐3.6。打开终端CMD、PowerShell或Bash输入python--version或Linux/macOS下可能需用python3--version若正常输出版本号如Python 3.10.12说明Python已就绪。若提示命令未找到请先访问python.org下载安装。二、创建项目文件夹与入口文件为项目单独创建一个目录并在其中新建主程序文件例如index.pymkdirmy_projectcdmy_projecttouchindex.py# Linux/macOS# Windows: new-item index.py目录结构此时为my_project/ └── index.py后续所有代码将围绕这个文件夹展开。三、建立独立的Python虚拟环境强烈建议为每个项目创建独立的虚拟环境避免不同项目间的依赖冲突。使用Python自带的venv模块即可python-mvenv .venv.venv是虚拟环境目录名可自定义如venv但建议保持统一。创建完成后激活虚拟环境操作系统激活命令Windows (CMD).venv\Scripts\activate.batWindows (PowerShell).venv\Scripts\Activate.ps1macOS / Linuxsource .venv/bin/activate激活成功后终端提示符前会出现(.venv)表明当前正在使用隔离环境。四、安装MySQL驱动并封装数据库操作4.1 安装依赖在激活的虚拟环境中安装pymysql纯Python实现的MySQL驱动pipinstallpymysql同时导出依赖清单方便部署时一键安装pip freezerequirements.txt此时requirements.txt中会包含pymysql及其依赖。4.2 编写数据库封装类db.py在项目根目录下新建db.py封装一个通用的数据库操作类统一管理连接、执行SQL、提交事务并支持自动重连和with上下文管理。# db.pyimportpymysqlclassDB:极简数据库封装提供query/execute/execute_ddl方法支持with自动关闭def__init__(self,hostlocalhost,userroot,password,databasetest_db,charsetutf8mb4,autocommitFalse):self.config{host:host,user:user,password:password,database:database,charset:charset,cursorclass:pymysql.cursors.DictCursor,autocommit:autocommit,}self.connNonedef_get_conn(self):获取连接含自动重连机制pingifself.connisNone:self.connpymysql.connect(**self.config)else:try:self.conn.ping(reconnectTrue)# 检测连接存活断线自动重连except:self.connpymysql.connect(**self.config)returnself.conndef_execute(self,sql,argsNone,commitFalse):内部执行方法返回游标和受影响行数connself._get_conn()cursorconn.cursor()try:affectedcursor.execute(sql,args)ifcommit:conn.commit()returncursor,affectedexceptException:conn.rollback()raisefinally:# 注意不在此关闭游标让调用方在获取结果后自行关闭passdefquery(self,sql,argsNone):执行查询SELECT返回结果列表字典形式cursor,_self._execute(sql,args,commitFalse)resultcursor.fetchall()cursor.close()returnresultdefexecute(self,sql,argsNone):执行更新INSERT/UPDATE/DELETE返回(受影响行数, 自增ID)cursor,affectedself._execute(sql,args,commitTrue)last_idcursor.lastrowid cursor.close()returnaffected,last_iddefexecute_ddl(self,sql):执行表结构变更CREATE/ALTER/DROP自动提交cursor,_self._execute(sql,commitTrue)cursor.close()returnTruedefclose(self):显式关闭连接一般用with自动管理无需手动调用ifself.conn:self.conn.close()self.connNone# 支持 with ... as 语法def__enter__(self):returnselfdef__exit__(self,exc_type,exc_val,exc_tb):self.close()亮点说明_get_conn()内使用ping(reconnectTrue)实现自动重连Web服务无需频繁开关连接。query()返回字典列表直观易用。execute()返回影响行数和插入ID满足大多数写操作需求。支持with语句退出块自动关闭连接无需显式close()。五、项目目录结构一览此时你的项目文件夹应包含以下内容my_project/ ├── .venv/ # 虚拟环境目录不纳入版本控制 ├── db.py # 数据库封装类 ├── index.py # 主程序入口业务逻辑 ├── requirements.txt # 依赖清单 └── .env # 可选存放敏感配置如数据库密码.venv由venv生成无需手动修改。db.py通用的数据库工具可复制到其他项目复用。index.py编写具体业务逻辑调用db中的方法。requirements.txt记录依赖便于部署时复现环境。.env可选使用python-dotenv管理密码避免硬编码。六、完整示例在 index.py 中实现增删改查在index.py中我们将演示如何创建users表插入新用户查询所有用户按姓名更新年龄添加新字段修改表结构使用with自动管理连接。# index.pyfromdbimportDBdefmain():# 实例化数据库对象请替换为你的实际连接信息dbDB(hostlocalhost,userroot,passwordyour_password,databasetest_db)# 使用 with 自动管理连接退出时自动 closewithdb:# 1. 创建表若不存在db.execute_ddl( CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) )print(✅ 表 users 已准备就绪)# 2. 插入数据affected,new_iddb.execute(INSERT INTO users (name, age) VALUES (%s, %s),(张三,25))print(f✅ 插入成功影响行数{affected}新ID{new_id})# 3. 查询所有用户usersdb.query(SELECT * FROM users)print( 当前所有用户)foruinusers:print(f id{u[id]}, name{u[name]}, age{u[age]})# 4. 更新数据affected,_db.execute(UPDATE users SET age %s WHERE name %s,(26,张三))print(f✅ 更新成功影响行数{affected})# 5. 修改表结构增加 email 字段try:db.execute_ddl(ALTER TABLE users ADD COLUMN IF NOT EXISTS email VARCHAR(100))print(✅ 新增 email 列成功)exceptExceptionase:# 若 MySQL 版本不支持 IF NOT EXISTS忽略重复列错误ifDuplicate column nameinstr(e):print(ℹ️ email 列已存在无需重复添加)else:raisee# 6. 再次查询验证updated_userdb.query(SELECT * FROM users WHERE name %s,(张三,))ifupdated_user:print(f 更新后张三信息{updated_user[0]})if__name____main__:main()运行结果示例✅ 表 users 已准备就绪 ✅ 插入成功影响行数1新ID1 当前所有用户 id1, name张三, age25 ✅ 更新成功影响行数1 ✅ 新增 email 列成功 更新后张三信息{id: 1, name: 张三, age: 26, created_at: datetime.datetime(2026, 8, 15, 14, 30, 0), email: None}七、部署到Linux的快速指南当项目需要部署到Linux服务器时只需三步上传项目文件不含.venv到服务器。在服务器上创建并激活虚拟环境python3-mvenv .venvsource.venv/bin/activate安装依赖pipinstall-rrequirements.txt运行程序python index.py若使用了.env存放密码确保在服务器上创建该文件并填入正确配置。八、总结通过以上步骤你获得了一个整洁、可维护的Python MySQL操作环境独立虚拟环境隔离依赖避免冲突。统一封装db.py将连接、重连、事务、游标管理集中处理业务代码只需关心SQL本身。自动资源管理借助with语句无需手动关闭连接降低出错概率。易于扩展封装类支持所有标准SQL可轻松添加日志、性能监控等增强功能。这套方案适用于从小型脚本到中等规模Web应用的各类场景。现在你可以在自己的项目中放心地使用MySQL了