MySQL学习入门

好的!以下是一个详细的 MySQL 入门学习文档,针对 Python 开发者,包含使用 SQLite 进行学习的示例。文档将涵盖实际开发中需要使用的各种相关操作和知识,帮助您从基础开始,逐步掌握在 Python 中使用 MySQL 的技能。


MySQL 入门学习文档

目录

  1. 简介
  2. 环境搭建
    • 2.1 安装 MySQL
    • 2.2 安装 Python 和 虚拟环境
    • 2.3 安装数据库连接库
  3. SQL 基础
    • 3.1 数据库和表
    • 3.2 数据类型
    • 3.3 基本 SQL 语句
  4. Python 操作 MySQL
    • 4.1 连接到数据库
    • 4.2 执行 SQL 语句
    • 4.3 事务处理
    • 4.4 处理异常
  5. 使用 ORM:SQLAlchemy
    • 5.1 安装 SQLAlchemy
    • 5.2 定义模型
    • 5.3 创建和查询数据
    • 5.4 更新和删除数据
  6. 使用 SQLite 进行练习
    • 6.1 SQLite 简介
    • 6.2 在 Python 中使用 SQLite
  7. 实际开发中的注意事项
    • 7.1 数据库设计
    • 7.2 性能优化
    • 7.3 安全性考虑
  8. 部署 MySQL 服务
    • 8.1 在本地部署 MySQL
    • 8.2 在服务器上部署 MySQL
  9. 附加资源
  10. 总结

1. 简介

MySQL 是一种流行的开源关系型数据库管理系统(RDBMS),广泛应用于 Web 开发和各种应用程序。它以高性能、可靠性和易用性著称。

对于 Python 开发者,了解如何与 MySQL 进行交互是非常重要的技能。本学习文档将指导您:

  • 理解 MySQL 的基本概念和 SQL 语句
  • 在 Python 中连接并操作 MySQL 数据库
  • 使用 ORM(对象关系映射)工具,如 SQLAlchemy,提高开发效率
  • 学习实际开发中需要注意的各种操作和知识

2. 环境搭建

2.1 安装 MySQL

2.1.1 下载 MySQL
  • 访问 MySQL 官方网站 下载适合您操作系统的 MySQL 安装包。
2.1.2 安装 MySQL
  • 根据下载的安装包,按照安装向导进行安装。
  • 在安装过程中,设置 root 用户的密码,并记住它,后续需要使用。
2.1.3 配置 MySQL
  • 安装完成后,确保 MySQL 服务已启动。
  • 可以使用命令行或图形化工具(如 MySQL Workbench)连接到 MySQL。
2.1.4 验证安装
  • 打开命令行,输入以下命令测试连接:

    mysql -u root -p
    
  • 输入密码后,应能进入 MySQL 命令行界面。

2.2 安装 Python 和 虚拟环境

2.2.1 安装 Python
  • 访问 Python 官网 下载并安装 Python 3.6 或更高版本。
2.2.2 创建虚拟环境
  • 使用虚拟环境隔离项目依赖。

    python -m venv venv
    
  • 激活虚拟环境:

    • Windows:

      venv\Scripts\activate
      
    • macOS/Linux:

      source venv/bin/activate
      

2.3 安装数据库连接库

2.3.1 选择数据库驱动
  • 常用的 MySQL 数据库驱动有:
    • mysql-connector-python:由 Oracle 官方提供。
    • PyMySQL:纯 Python 实现。
    • mysqlclient:需要编译,性能较好。
  • 本文将使用 PyMySQL,因为它易于安装且无需编译。
2.3.2 安装 PyMySQL
pip install PyMySQL
2.3.3 安装 SQLAlchemy(可选)
  • 后续将介绍如何使用 ORM 工具 SQLAlchemy。
pip install sqlalchemy

3. SQL 基础

在开始编写代码之前,了解一些 SQL 基础知识是非常有必要的。

3.1 数据库和表

  • 数据库:数据的集合,每个数据库包含多个表。
  • :由行和列组成的结构,用于存储数据。

3.2 数据类型

  • 数值类型:INT、FLOAT、DOUBLE、DECIMAL
  • 字符串类型:CHAR、VARCHAR、TEXT
  • 日期和时间类型:DATE、TIME、DATETIME、TIMESTAMP

3.3 基本 SQL 语句

3.3.1 创建数据库
CREATE DATABASE mydatabase;
3.3.2 使用数据库
USE mydatabase;
3.3.3 创建表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(100),age INT
);
3.3.4 插入数据
INSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 30);
3.3.5 查询数据
SELECT * FROM users;
3.3.6 更新数据
UPDATE users SET age = 31 WHERE name = 'Alice';
3.3.7 删除数据
DELETE FROM users WHERE name = 'Alice';

4. Python 操作 MySQL

4.1 连接到数据库

4.1.1 导入 PyMySQL
import pymysql
4.1.2 建立连接
connection = pymysql.connect(host='localhost',user='root',password='your_password',database='mydatabase',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor
)

说明:

  • host:数据库服务器地址,默认本地为 localhost
  • user:数据库用户名,默认管理员为 root
  • password:对应用户的密码。
  • database:要连接的数据库名称。
  • charset:字符集设置为 utf8mb4,支持 Emoji 等字符。
  • cursorclass:指定返回结果为字典形式。
4.1.3 测试连接
try:with connection.cursor() as cursor:cursor.execute("SELECT VERSION()")result = cursor.fetchone()print("Database version:", result)
finally:connection.close()

4.2 执行 SQL 语句

4.2.1 创建表
try:with connection.cursor() as cursor:sql = """CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(100),age INT)"""cursor.execute(sql)connection.commit()
finally:connection.close()
4.2.2 插入数据
try:with connection.cursor() as cursor:sql = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"cursor.execute(sql, ('Bob', 'bob@example.com', 25))connection.commit()
finally:connection.close()
4.2.3 查询数据
try:with connection.cursor() as cursor:sql = "SELECT * FROM users WHERE age > %s"cursor.execute(sql, (20,))results = cursor.fetchall()for row in results:print(row)
finally:connection.close()
4.2.4 更新数据
try:with connection.cursor() as cursor:sql = "UPDATE users SET age = %s WHERE name = %s"cursor.execute(sql, (26, 'Bob'))connection.commit()
finally:connection.close()
4.2.5 删除数据
try:with connection.cursor() as cursor:sql = "DELETE FROM users WHERE name = %s"cursor.execute(sql, ('Bob',))connection.commit()
finally:connection.close()

4.3 事务处理

  • 默认情况下,PyMySQL 会自动开启事务。
  • 使用 connection.commit() 提交事务。
  • 使用 connection.rollback() 回滚事务。
4.3.1 示例:事务操作
try:with connection.cursor() as cursor:sql1 = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"sql2 = "UPDATE accounts SET balance = balance - %s WHERE user_id = %s"cursor.execute(sql1, ('Charlie', 'charlie@example.com', 28))cursor.execute(sql2, (100, 1))connection.commit()
except Exception as e:connection.rollback()print("Transaction failed:", e)
finally:connection.close()

4.4 处理异常

  • 在数据库操作中,可能会发生各种异常,需要进行捕获和处理。
4.4.1 常见异常
  • pymysql.err.InternalError:内部错误
  • pymysql.err.OperationalError:操作错误,如连接失败
  • pymysql.err.IntegrityError:完整性错误,如主键重复
4.4.2 异常处理示例
import pymysqltry:# 数据库操作pass
except pymysql.err.IntegrityError as e:print("Integrity error:", e)
except pymysql.err.OperationalError as e:print("Operational error:", e)
except Exception as e:print("Unexpected error:", e)
finally:connection.close()

5. 使用 ORM:SQLAlchemy

5.1 安装 SQLAlchemy

pip install sqlalchemy

5.2 定义模型

5.2.1 导入模块
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
5.2.2 创建数据库引擎
engine = create_engine('mysql+pymysql://root:your_password@localhost/mydatabase')
5.2.3 创建基类
Base = declarative_base()
5.2.4 定义模型类
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(100))email = Column(String(100))age = Column(Integer)def __repr__(self):return f"<User(name='{self.name}', email='{self.email}', age={self.age})>"
5.2.5 创建表
Base.metadata.create_all(engine)

5.3 创建和查询数据

5.3.1 创建会话
Session = sessionmaker(bind=engine)
session = Session()
5.3.2 添加数据
new_user = User(name='David', email='david@example.com', age=35)
session.add(new_user)
session.commit()
5.3.3 查询数据
users = session.query(User).filter(User.age > 30).all()
for user in users:print(user)

5.4 更新和删除数据

5.4.1 更新数据
user = session.query(User).filter_by(name='David').first()
user.age = 36
session.commit()
5.4.2 删除数据
user = session.query(User).filter_by(name='David').first()
session.delete(user)
session.commit()

6. 使用 SQLite 进行练习

6.1 SQLite 简介

  • SQLite 是一个轻量级的嵌入式关系型数据库,无需单独安装服务器。
  • 适合用于学习和开发阶段的测试。

6.2 在 Python 中使用 SQLite

6.2.1 使用内置模块 sqlite3
import sqlite3connection = sqlite3.connect('test.db')
cursor = connection.cursor()
6.2.2 执行 SQL 语句
cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)')
cursor.execute('INSERT INTO users (name) VALUES (?)', ('Eve',))
connection.commit()
6.2.3 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:print(row)
6.2.4 关闭连接
connection.close()
6.2.5 使用 SQLAlchemy 操作 SQLite
  • 修改数据库引擎的连接字符串:

    engine = create_engine('sqlite:///test.db')
    
  • 其余操作与 MySQL 基本一致。


7. 实际开发中的注意事项

7.1 数据库设计

  • 规范化:避免数据冗余,确保数据一致性。
  • 命名规范:表名、字段名应具有意义,遵循命名规则。
  • 主键和外键:设计合适的主键,使用外键维护表之间的关系。
  • 索引:为常用的查询字段添加索引,提高查询性能。

7.2 性能优化

  • 使用索引:加速查询,但过多的索引会影响写入性能。
  • 查询优化:避免使用 SELECT *,仅选择需要的字段。
  • 分页查询:对于大量数据,使用分页避免一次性加载过多数据。
  • 连接池:在 Python 中使用数据库连接池,减少连接开销。

7.3 安全性考虑

  • 防止 SQL 注入:使用参数化查询或 ORM,避免直接拼接 SQL。
  • 加密敏感数据:对密码等敏感信息进行哈希或加密存储。
  • 权限管理:限制数据库用户的权限,只授予必要的权限。
  • 备份和恢复:定期备份数据库,制定恢复计划。

8. 部署 MySQL 服务

8.1 在本地部署 MySQL

  • 安装 MySQL:参考环境搭建部分。

  • 配置远程访问:如果需要其他机器访问本地 MySQL,需要配置允许远程连接。

    -- 在 MySQL 命令行中执行
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  • 修改配置文件:编辑 my.cnfmy.ini,注释掉或修改 bind-address

    # bind-address = 127.0.0.1
    
  • 重启 MySQL 服务

8.2 在服务器上部署 MySQL

  • 选择服务器:可以使用云服务器(如 AWS、阿里云、腾讯云等)。
  • 安装 MySQL:根据服务器的操作系统,安装对应版本的 MySQL。
  • 安全配置
    • 设置强密码。
    • 禁止 root 用户远程登录,创建专用的数据库用户。
    • 开启防火墙,仅开放必要的端口(如 3306)。
    • 使用 SSL 加密连接。
  • 备份策略:配置自动备份,防止数据丢失。

9. 附加资源

  • MySQL 官方文档:https://dev.mysql.com/doc/
  • PyMySQL 文档:https://pymysql.readthedocs.io/
  • SQLAlchemy 文档:https://docs.sqlalchemy.org/
  • MySQL 教程:菜鸟教程 MySQL
  • SQL 基础教程:W3Schools SQL Tutorial

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI模型---安装cuda与cuDNN

1.安装cuda 先打开cmd 输入nvidia-smi 查看显卡支持cuda对应的版本&#xff1a; 然后去英伟达官网下载cuda&#xff08;外网多刷几次&#xff09; https://developer.nvidia.com/cuda-toolkit-archive 注意对应版本 安装过程中如果显示如下图&#xff1a; 请安装visual Stu…

大数据背景下信息通信网络安全管理管理策略研究

摘要&#xff1a; 在互联网以及计算机技术的支持下我国已经进入了大数据时代&#xff0c;各行各业在发展的进程之中更多的借助云计算技术慢慢完成了信息发展。在信息化发展的进程中&#xff0c;因为网络的开放性&#xff0c;促使信息通信网络安全工作面临一定危胁&#xff0c;安…

ajax (一)

什么是 AJAX [ˈeɪdʒks] &#xff1f; 概念&#xff1a;AJAX是浏览器与服务器进行 数据通信 的技术&#xff0c;动态数据交互 怎么用AJAX? 1. 先使用 axios [k‘sio ʊ s] 库&#xff0c; 与服务器进行 数据通信 ⚫ 基于 XMLHttpRequest 封装、代码简单、月下载量在 1…

k8s rainbond centos7/win10 -20241124

参考 https://www.rainbond.com/ 国内一站式云原生平台 对centos7环境支持不太行 [lighthouseVM-16-5-centos ~]$ curl -o install.sh https://get.rainbond.com && bash ./install.sh 2024-11-24 09:56:57 ERROR: Ops! Docker daemon is not running. Start docke…

使用 Maven 开发 IntelliJ IDEA 插件

使用 Maven 开发 IntelliJ IDEA 插件的完整流程 1. 创建 Maven 项目 1.1 使用 IntelliJ 创建 Maven 项目 打开 IntelliJ IDEA&#xff0c;点击 File > New > Project。选择 Maven&#xff0c;填写项目名称和 GroupId&#xff0c;例如&#xff1a; GroupId: com.exampl…

Load-Balanced-Online-OJ(负载均衡式在线OJ)

负载均衡式在线OJ 前言1. 项目介绍2. 所用技术与环境所用技术栈开发环境 3. 项目宏观结构3.1 项目核心模块3.2 项目的宏观结构 4. comm公共模块4.1 日志&#xff08;log.hpp &#xff09;4.1.1 日志主要内容4.1.2 日志使用方式4.1.2 日志代码 4.2 工具&#xff08;util.hpp&…

微信小程序上传微信官方审核流程(1)

1&#xff0c;打开微信开发者工具 2&#xff0c;微信开发者工具右上角有一个上传按钮&#xff0c;点击上传按钮 3&#xff0c;点击完上传按钮会弹出一个上传成功的提示&#xff0c;点击提示框中的确定按钮 4&#xff0c;点击完确定按钮后会显示填写版本好和项目备注 5&#x…

EXISTS 和 IN 的使用方法、特性及查询效率比较

在 SQL Server 中&#xff0c;EXISTS 和 IN 是两个常用的子查询操作符&#xff0c;用于检查某个值是否存在于一个子查询的结果集中。尽管它们在功能上有相似之处&#xff0c;但在使用方法、特性、查询效率和生成查询计划方面存在一些重要的区别。本文将详细探讨这两个操作符的使…

flink学习(3)——方法的使用—对流的处理(map,flatMap,filter)

map 数据 86.149.9.216 10001 17/05/2015:10:05:30 GET /presentations/logstash-monitorama-2013/images/github-contributions.png 83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css 83.149.9.216 10002 17/05/20…

数据结构(Java版)第一期:时间复杂度和空间复杂度

目录 一、数据结构的概念 1.1. 什么是数据结构 1.2. 算法与数据结构的关系 二、算法效率 三、时间复杂度 3.1. 大O的渐进表⽰法 3.2. 计算冒泡排序的时间复杂度 3.3. 计算二分查找的时间复杂度 四、空间复杂度 4.1. 空间复杂度 4.2. 冒泡排序的空间复杂度 4.3.…

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程 引言 微信小程序作为一种新兴的轻量级应用,凭借其便捷性和丰富的功能受到了广泛的欢迎。在开发小程序的过程中,合理配置全局属性是提升用户体验的关键。本文将深入探讨小程序的全局配置中的window选项,重点介绍导…

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…

LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读

目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…

【Go】-go中的锁机制

目录 一、锁的基础知识 1. 互斥量/互斥锁 2. CAS&#xff08;compare and swap&#xff09; 3. 自旋锁 4. 读写锁 5. 乐观锁 & 悲观锁 6. 死锁 二、go中锁机制 1. Mutex-互斥锁 2. RWMutex-读写锁 2.1 RWMutex流程概览 2.2 写锁饥饿问题 2.3. golang的读写锁源…

VSCode 新建 Python 包/模块 Pylance 无法解析

问题描述&#xff1a; 利用 VSCode 写代码&#xff0c;在项目里新建一个 Python 包或者模块&#xff0c;然后在其他文件里正常导入这个包或者模块时出现&#xff1a; Import “xxxx” could not be resolved Pylance (reportMissingImports) 也就是说 Pylance 此时无法解析我们…

深入理解 Java 阻塞队列:使用场景、原理与性能优化

在并发编程中&#xff0c;线程安全的队列是解决线程间任务传递和调度的关键工具之一。阻塞队列&#xff08;BlockingQueue&#xff09;作为一种线程安全的队列&#xff0c;实现了在并发环境下对共享数据的安全访问&#xff0c;广泛应用于生产者-消费者模型、任务调度和多线程计…

.NET9 - 新功能体验(二)

书接上回&#xff0c;我们继续来聊聊.NET9和C#13带来的新变化。 01、新的泛型约束 allows ref struct 这是在 C# 13 中&#xff0c;引入的一项新的泛型约束功能&#xff0c;允许对泛型类型参数应用 ref struct 约束。 可能这样说不够直观&#xff0c;简单来说就是Span、ReadO…

C++游戏《密室逃脱2.0》预告

这里是2.0预告区域&#xff0c;发布时将直接以此文章界面发布&#xff0c;可以提前点赞收藏。 你们所期待的2.0就要来啦&#xff01; 是的&#xff0c;没错&#xff0c;今年年末就要出2.0版本了&#xff0c;时间大约在12月底。玩法有更新&#xff0c;更新如下&#xff1a; 增…

抗癌药物“曲妥珠单抗”,或将纳入2025版《中国药典》!

在抗癌药物的浩瀚星空中&#xff0c;曲妥珠单抗如同一颗璀璨的星辰&#xff0c;以其卓越的治疗效果和广泛的应用前景&#xff0c;照亮了无数HER2阳性癌症患者的生命之路。近日&#xff0c;从国家药典委员会传来振奋人心的消息——注射用曲妥珠单抗正式进入《中国药典》2025版国…

JavaParser 的全面介绍

JavaParser 是什么&#xff1f; JavaParser 的快速介绍可以参考&#xff1a; # JavaParser的快速介绍 JavaParser是一个用于解析Java源码的开源工具&#xff0c;它提供了一种简单而有效的方式来解析和操作Java代码。JavaParser解析源码的方式主要基于其将Java代码转换为抽象语…