零基础入门Python16|MySQL安装、账号权限与数据迁移
零基础入门Python16MySQL安装、账号权限与数据迁移本篇图解数据从哪里来、到哪里去图中最重要的边界是事务只有成功路径才提交数据失败路径不能留下半条业务记录。一、上一篇课后练习讲解取消订单必须在同一事务中读取明细、恢复库存和修改状态defcancel_order(connection,order_id):try:connection.execute(BEGIN)orderconnection.execute(SELECT status FROM orders WHERE id ?,(order_id,),).fetchone()iforderisNone:raiseValueError(订单不存在)iforder[status]cancelled:raiseValueError(订单已经取消)itemsconnection.execute(SELECT product_id, quantity FROM order_items WHERE order_id ?,(order_id,),).fetchall()foriteminitems:connection.execute(UPDATE products SET stockstock? WHERE id?,(item[quantity],item[product_id]),)connection.execute(UPDATE orders SET statuscancelled WHERE id?,(order_id,),)connection.commit()exceptException:connection.rollback()raise重复取消被拒绝防止库存重复增加。生产并发环境还需要行锁Django项目会实际使用select_for_update。可执行验收答案将取消逻辑包进测试数据库并检查回滚deftest_cancel_success_restores_stock(db):ordercreate_order(db,statuspaid,items[(1,2)])beforedb.scalar(select stock from products where id1)cancel_order(db,order.id)afterdb.scalar(select stock from products where id1)assertafterbefore2try:cancel_order(db,order.id)exceptValueErrorasexc:assert已经取消instr(exc)assertdb.scalar(select stock from products where id1)after再把UPDATE products改成错误的 product id人为触发异常事务结束后订单仍为 paid、库存未增加。SQLite 测试用db.rollback()清理MySQL/Django 集成测试还要确认连接隔离级别和行锁行为。二、本篇成果在Windows或Docker中运行MySQL 8创建utf8mb4数据库和最小权限账号理解服务、客户端、数据库和连接字符串并把SQLite表结构迁移到MySQL。三、启动MySQL使用已安装MySQL服务时mysql--version mysql-uroot-p也可以用Dockerdocker run--name course-mysql-e MYSQL_ROOT_PASSWORDchange-root-password-p 3306:3306-d mysql:8.4等待容器启动后docker exec-it course-mysql mysql-uroot-proot只用于管理不给业务程序长期使用。四、字符集和业务账号CREATEDATABASEbackend_courseCHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ci;CREATEUSERcourse%IDENTIFIEDBYreplace-with-strong-password;GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEXONbackend_course.*TOcourse%;FLUSHPRIVILEGES;SHOWGRANTSFORcourse%;utf8mb4能保存完整Unicode。生产环境应把来源限制为应用服务器IP教学容器使用%便于连接。五、SQLite与MySQL差异SQLite是单文件嵌入式数据库MySQL是独立服务SQLite占位符常用问号MySQL驱动常用%sMySQL支持账号权限、并发和运维能力。不要把SQLite文件直接复制给MySQL迁移包含重建结构和导入数据。金额使用DECIMAL而不是FLOAT避免二进制小数误差。InnoDB支持事务和行级锁。六、MySQL表结构USEbackend_course;CREATETABLEproducts(idBIGINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(120)NOTNULL,priceDECIMAL(10,2)NOTNULL,stockINTUNSIGNEDNOTNULLDEFAULT0,created_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMP,CONSTRAINTchk_products_priceCHECK(price0),INDEXidx_products_name(name))ENGINEInnoDB;CREATETABLEorders(idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,statusVARCHAR(20)NOTNULLDEFAULTpending,total_amountDECIMAL(12,2)NOTNULLDEFAULT0,created_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMP,INDEXidx_orders_user_created(user_id,created_at))ENGINEInnoDB;七、环境变量连接.envDATABASE_URLmysqlpymysql://course:password127.0.0.1:3306/backend_course?charsetutf8mb4.env必须加入.gitignore。安装驱动python-m pip install pymysql最小连接检查importosimportpymysql connectionpymysql.connect(hostos.getenv(MYSQL_HOST,127.0.0.1),portint(os.getenv(MYSQL_PORT,3306)),useros.environ[MYSQL_USER],passwordos.environ[MYSQL_PASSWORD],databaseos.getenv(MYSQL_DATABASE,backend_course),charsetutf8mb4,)try:withconnection.cursor()ascursor:cursor.execute(SELECT VERSION())print(MySQL版本,cursor.fetchone()[0])finally:connection.close()八、迁移核对清单在MySQL执行建表脚本从SQLite按确定字段导出JSON或CSV事务中参数化插入MySQL比较每张表行数抽查金额、中文、日期和关联应用先连接测试库再连接生产库。不要只看导入命令成功必须验证数据数量和内容。九、本篇验收MySQL 8服务可连接backend_course使用utf8mb4course账号不能管理其他用户表使用InnoDB和DECIMAL密码来自环境变量能解释迁移不等于复制SQLite文件。十、课后练习创建users、products、orders和order_items完整表结构给外键和常用查询建立索引使用course账号验证CRUD成功再尝试CREATE USER并确认被拒绝。下一篇会用SQLAlchemy统一SQLite和MySQL的Python访问方式。实战补充数据库连接配置实验开发环境使用 SQLite部署环境通常使用 PostgreSQL。连接串必须从环境变量读取代码不应该根据 if production 复制两套 Repository。importosfromsqlalchemyimportcreate_engine database_urlos.environ.get(DATABASE_URL,sqlite:///./dev.db)enginecreate_engine(database_url,pool_pre_pingTrue)测试时传入临时 SQLite 文件CI 用服务容器提供 PostgreSQL同一个模型和业务测试在两种数据库上运行差异通过测试暴露而不是靠猜。验收与课后练习分别设置 DATABASE_URL 运行健康检查故意删除环境变量时得到明确错误。课后记录 SQLite 和 PostgreSQL 在日期、布尔、唯一约束上的差异下一篇实现 Repository。本篇结束完整模块文件本节不是代码片段而是本篇结束时该模块的完整版本。请先备份旧文件再整体替换替换后重新运行本篇命令和测试。阅读时重点看本篇新增的函数、事务边界和错误处理未涉及的代码先不要自行删减。本篇完整示例CREATE DATABASE backend_course CHARACTER SET utf8mb4; CREATE USER courselocalhost IDENTIFIED BY change-me; GRANT ALL ON backend_course.* TO courselocalhost;

相关新闻

从数学建模到资源优化:整数线性规划在出版社书号分配中的实战解析

从数学建模到资源优化:整数线性规划在出版社书号分配中的实战解析

1. 项目概述:从一道经典赛题看数学建模的实战价值十几年前,当我第一次翻开那本厚厚的《全国大学生数学建模竞赛优秀论文汇编》,2006年A题“出版社的资源配置”就给我留下了极深的印象。这不仅仅是因为它来自权威的“高教社杯”,更…

2026/8/22 16:45:45 阅读更多 →
基于SpringBoot+Vue的学生交流互助平台系统(毕业设计项目源码+文档)

基于SpringBoot+Vue的学生交流互助平台系统(毕业设计项目源码+文档)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/22 16:45:45 阅读更多 →
Mysql 交叉表查询 JOIN

Mysql 交叉表查询 JOIN

“交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势.汇总字段位于行和列的交叉处。每个交叉处的值代表对既满足行条件又满足列条件的记录的汇总(求和、计数等)互联网方面这种纯S…

2026/8/22 16:45:45 阅读更多 →

最新新闻

基于SpringBoot的“乐享”音乐网站系统(源码+讲解视频+LW)

基于SpringBoot的“乐享”音乐网站系统(源码+讲解视频+LW)

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

2026/8/22 20:02:57 阅读更多 →
C++模板本质:编译期元编程与类型系统实践

C++模板本质:编译期元编程与类型系统实践

1. 为什么“模板”不是语法糖&#xff0c;而是C程序员的思维跃迁起点很多人学C模板&#xff0c;是从“写个通用函数”开始的——比如把int max(int a, int b)改成template<typename T> T max(T a, T b)。这没错&#xff0c;但只摸到了表皮。我带过十几期C入门班&#xff…

2026/8/22 20:02:57 阅读更多 →
时间序列预测实战:从ARIMA到LSTM的模型选择与避坑指南

时间序列预测实战:从ARIMA到LSTM的模型选择与避坑指南

1. 从业务直觉到数据规律&#xff1a;为什么时间序列预测是建模的“硬骨头”干了这么多年数学建模&#xff0c;从国赛到美赛&#xff0c;再到后来在企业里做各种销量、流量、用户量的预测&#xff0c;我发现一个特别有意思的现象&#xff1a;很多刚接触建模的同学&#xff0c;一…

2026/8/22 20:02:57 阅读更多 →
ProxMO:解决LLM智能体训练中多轮功劳分配难题的核心技术

ProxMO:解决LLM智能体训练中多轮功劳分配难题的核心技术

1. 项目概述&#xff1a;为什么“功劳分配”是LLM智能体训练的核心难题&#xff1f;最近在折腾LLM智能体训练的朋友&#xff0c;估计都绕不开一个词&#xff1a;Credit Assignment&#xff0c;中文可以理解为“功劳分配”或“信用分配”。这听起来有点抽象&#xff0c;但如果你…

2026/8/22 20:02:57 阅读更多 →
视觉语言模型安全新挑战:记忆增强多智能体越狱攻击深度解析

视觉语言模型安全新挑战:记忆增强多智能体越狱攻击深度解析

1. 项目概述&#xff1a;当图像成为攻击的“特洛伊木马”最近在安全圈和AI研究社区里&#xff0c;一个话题的热度正在悄然攀升&#xff1a;视觉语言模型的安全防线&#xff0c;可能比你想象的要脆弱得多。这个项目的核心&#xff0c;就是探讨一种名为“记忆增强多智能体越狱攻击…

2026/8/22 20:02:56 阅读更多 →
免费批量下载B站视频的完整指南:downkyi搞定8K、HDR与去水印

免费批量下载B站视频的完整指南:downkyi搞定8K、HDR与去水印

免费批量下载B站视频的完整指南&#xff1a;downkyi搞定8K、HDR与去水印 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等…

2026/8/22 20:01:56 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域&#xff0c;PCB&#xff08;印制电路板&#xff09;的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡&#xff0c;如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目&#xff0c;选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具&#xff0c;而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说&#xff0c;电路分析是专业课的重中之重&#xff0c;也是拉开分差的关键。进入8月&#xff0c;复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好&#xff0c;我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时&#xff0c;你是否也遇到过这样的困扰&#xff1a;生成的代码功能上没问题&#xff0c;但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →