挑战30天学完Python:Day28 数据库Mysql

🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点知识,但又没有系统学习的使用者。总之如果你想提升自己的Python技能,欢迎加入《挑战30天学完Python》

  • 📘 Day 28
  • Mysql
    • 安装和配置
    • 连接MySQL
    • 创建数据库
    • 创建表
    • 插入数据
    • 查询数据
    • 删除数据
    • 执行事务
    • 💻 第28天练习

📘 Day 28

在上一篇中我们学习了nosql数据mongodb,这篇我们将了解学习关系型数据库。sql数据很多,比如Oracle、DB2、SQL Server、Access、MySQL,其中Mysql是在各类开发中应用比较广泛的一种。

本篇作为整个系列的调整补充,学习一下Python操作Mysql数据的基础入门知识。

Mysql

MySQL是一种开源的关系型数据库管理系统,它是一种客户端/服务器模式的数据库管理系统,由瑞典MySQL AB公司开发,后被Sun公司收购,Sun公司又被Oracle公司收购。MySQL是目前最流行的开源数据库之一,由于其可扩展性,高性能和可靠性而受到广泛关注。MySQL是一种用于存储和管理数据的数据库系统,可以用于开发Web应用程序,大数据,云计算和其他需要持久存储的应用程序。

本文将介绍如何在Python中使用MySQL数据库。我们将学习如何安装和配置MySQL数据库,如何在Python中连接到MySQL数据库,如何执行SQL查询和如何更新和删除数据。按惯例都会提供Python代码示例,以便可以进行实战操作。

安装和配置

以下介绍Window环境下的Mysql初始化,其他环境的根据需要Bing搜索教程。

  1. 首先,前往MySQL官网的下载页面 (https://dev.mysql.com/downloads/mysql/) 选择与你的系统相应的版本。我这里选择最新的8.x的版本。如果你的系统是64位的Windows系统,那么选择MySQL Installer for Windows(mysql-installer-web-community-xxx.msi)下载。

在这里插入图片描述

  1. 选择 Developer Default 安装类型。这会安装MySQL Server、MySQL Workbench、MySQL Shell、MySQL Router以及一些其他依赖程序。
  2. 在下一步过程中,会有一个安全选项,这里在本系列中建议选择 Use Legacy Authetication Method,即5.x的老方式主要是比较兼容。
  3. 接下来会提示你创建一个MySQL root用户的密码,这是管理数据库所必须的,建议你创建一个安全的密码,并记住它。
  4. 剩下默认一路下一步就行,安装完成后,可以通过在Windows菜单中搜索MySQL 8.0 Command Line Client”来打开MySQL命令行客户端。
  5. 在MySQL命令行客户端中,可以直接输入密码登录MySQL服务器

在这里插入图片描述

  1. 登录到MySQL服务器后,可以使用以下命令来查看已有的默认数据库
  mysql> show databases;
  +-----------------------+
  | Database              |
  +-----------------------+
  | information_schema    |
  | mydatabase            |
  | mysql                 |
  | performance_schema    |
  | sakila                |
  | sys                   |
  | world                 |
  +-----------------------+
  6 rows in set (0.01 sec)
  1. 如果需要创建新的数据库,可以使用以下命令。其中 mydatabase 是你想创建的数据库名称。
# 创建数据库命令
create database mydatabase;
# 成功后返回 Query OK, 1 row affected (0.01 sec)

# 使用切换数据库命令
mysql> use mydatabase;
# 成功后返回 Database changed
  1. 命令行在数据中创建表命令如下
# 创建新表
create table students (id int AUTO_INCREMENT PRIMARY KEY, name varchar(100), country varchar(20), city varchar(20), age int);
# Query OK, 0 rows affected (0.01 sec)

# 查询表结构 students 为刚创建的表名
DESCRIBE students;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int          | NO   | PRI | NULL    | auto_increment |
| name    | varchar(100) | YES  |     | NULL    |                |
| country | varchar(20)  | YES  |     | NULL    |                |
| city    | varchar(20)  | YES  |     | NULL    |                |
| age     | int          | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

以上就是在Windows系统上下载和配置MySQL的步骤。数据库环境准备好了,接下来就让我们看看 Python 对 Mysql 是如何操作的吧。

连接MySQL

在Python中有几个库可以帮助我们快速操作mysql数据库。例如 mysql-connector、MySQLdb和pymysql。本篇内容将使用 mysql-connector 作为重点使用讲解。

首先,需要使用Python的MySQL Connector模块来连接到MySQL数据库。可以通过以下命令来安装该模块:

pip install mysql-connector-python

安装完成后,可以使用以下代码来连接到MySQL数据库

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="yourpassword", # 你安装时候设置的root账号密码
  database="mydatabase" # 之前创建的数据库
)

print(mydb)
# 连接成功会打印出数据连接对象内容 如:<mysql.connector.connection_cext.CMySQLConnection object at 0x000001E5228E30D0>

在上面的代码中,我们使用了mysql.connector模块来连接到MySQL数据库。在connect()方法中,我们传递了四个参数:

  • host:MySQL服务器的地址。在本地使用MySQL时,通常是“localhost”
  • user:连接MySQL时使用的用户名
  • password:连接MySQL时使用的密码
  • database:要连接的数据库名称

在执行完上述代码后,可以通过打印mydb变量来确认是否已经成功连接到MySQL数据库。

创建数据库

在连接演示中我们是直接连接了已创建了数据为前提的。但我们是可以先忽略它,通过代码进行创建所需的数据的。下面是重新创建 thirty_days_of_python 的例子。

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="yourpassword"
)

mycursor = mydb.cursor()
# 如果数据库已经可以先使用 drop database thirty_days_of_python; 删除掉,这个具体会在后边讲到。
mycursor.execute("CREATE DATABASE thirty_days_of_python")

在上面的代码中,我们不指定数据库连接到MySQL服务器,然后创建了一个名为 thirty_days_of_python 的数据库。主要是用到了cursor(游标)执行SQL语法命令。

在执行完以上代码后,可以在MySQL的命令行中输入以下命令来查看是否已经成功创建了数据库。

SHOW DATABASES;

如果能看到 thirty_days_of_python 出现在列表中,说明数据库已经成功创建。

创建表

在一般情况下,数据都是事先创建好的,并且后期也不会轻易换数据名。所以我们在接下创建创建表的过程中,就可以使用最开始直连方式创建数据库连接对象。然后进行其他游标命令,比如接下来的创建表。

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="yourpassword",
  database="thirty_days_of_python"
)

mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE students (id int AUTO_INCREMENT PRIMARY KEY, name varchar(100), country varchar(20), city varchar(20), age int)")

通过游标创建了一个名为 students 的表格。该表格包含几列,分别为id自增、name姓名、country国家、city城市和age年龄,并都给了对应的数据类型。varcha表示字符类型。在执行完以上代码后,可以在MySQL的命令行中输入以下命令来查看是否已经成功创建了表格:

mysql> use thirty_days_of_python;
Database changed
mysql> show tables;
+---------------------------------+
| Tables_in_thirty_days_of_python |
+---------------------------------+
| students                        |
+---------------------------------+
1 row in set (0.00 sec)

从表列表中可以看到,students学生表已经被成功地创建。

插入数据

有了表之后,我们就可以向其插入一条或者多条数据。这里演示插入一条记录的代码:

mycursor = mydb.cursor()
# mycursor.execute("CREATE TABLE students (id int AUTO_INCREMENT PRIMARY KEY, name varchar(100), country varchar(20), city varchar(20), age int)")
sql = "INSERT INTO students (name, country, city, age) VALUES (%s, %s, %s, %s)" # 执行语句
val = ("MegaQi", "China", "ShangHai", 36) # 占位符值
mycursor.execute(sql, val) # 执行游标

mydb.commit() # 提交入库

print(mycursor.rowcount, "record inserted.")

在上边的代码中我们分别创建一个sql字符语句和元组值变量,在传入execute后执行了sql insert语句。这里特别注意的是要多一步 commit(),否则增操作不会生效。

同样,我们通过SQL命令行终端,查看下一条学生数据是否被正确插入。

mysql> SELECT * FROM students;
+----+--------+---------+----------+------+
| id | name   | country | city     | age  |
+----+--------+---------+----------+------+
|  1 | MegaQi | China   | ShangHai |   36 |
+----+--------+---------+----------+------+
1 row in set (0.00 sec)

有时候,我们可能需要将大量的数据插入到数据库中,此时可以使用Python的executemany()方法来执行批量插入操作。例如:

mycursor = mydb.cursor()

sql = "INSERT INTO students (name, country, city, age) VALUES (%s, %s, %s, %s)"
val = [
  ('David', 'UK', 'London', 30),
  ('John', 'Sweden', 'Stockholm', 22)
]
mycursor.executemany(sql, val)
mydb.commit()

查询数据

我们可以使用SELECT语句来从表格中查询数据。其中:

  • fetchall:查询所有数据
  • fetchone:查询一条,默认符合条件的第一条
  • fetchmany: 指定数量查询,相当于sql limit
mycursor.execute("SELECT * FROM students")
myresult = mycursor.fetchall()
for x in myresult:
  print(x)
# (1, 'MegaQi', 'China', 'ShangHai', 36)

更新数据

对于更新操作,同理只是将执行SQL字符串语句换成UPDATE。比如我们将第一条数据的年龄改成18岁。

# 更新操作
sql = "UPDATE students SET age = 18 WHERE id = 1"
mycursor.execute(sql)
mydb.commit()

# 查询看是否更新成功
mycursor.execute("SELECT * FROM students")
results = myresult = mycursor.fetchall()
print(results)
# [(1, 'MegaQi', 'China', 'ShangHai', 18)]

删除数据

在更新数据后,我们可以使用DELETE语句来删除表格中的数据。

# 更新操作
sql = "DELETE FROM students WHERE id = 1"
mycursor.execute(sql)
mydb.commit()

# 查询看是否更新成功
mycursor.execute("SELECT * FROM students")
results = myresult = mycursor.fetchall()
print(results)

如果结果中没有之前插入第一条数据,说明数据被正确删除。在实际应用场景,表数据是不太建议直接删除,而是增加一个状态字段通过UPDATE操作标记为软删除。

执行多SQL语句

有时候,我们可能需要在一个Python程序中执行多个SQL语句,可以使用Python的多行字符串来实现,例如:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="yourpassword",
  database="thirty_days_of_python"
)

mycursor = mydb.cursor()

sql = """
CREATE TABLE students (id int AUTO_INCREMENT PRIMARY KEY, name varchar(100), country varchar(20), city varchar(20), age int);
INSERT INTO students (name, country, city, age) VALUES ("MegaQi", "China", "ShangHai", 36);
INSERT INTO students (name, country, city, age) VALUES ('David', 'UK', 'London', 30);
"""

mycursor.execute(sql)

mydb.commit()

在上面的代码中,我们使用三个连续的引号来创建一个多行字符串,将多个SQL语句放在一个字符串中,然后使用execute()方法来执行这些SQL语句。

执行事务

事务是一组SQL语句的执行,它们被视为单个操作单元。如果其中任何一条语句失败,整个事务都将被回滚,以确保数据库的一致性和完整性。

在MySQL中,我们可以使用START TRANSACTION、COMMIT和ROLLBACK语句来执行事务。而在Python中,我们可以使用MySQL连接对象的start_transaction()、commit()和rollback()方法来执行事务。例如:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="yourpassword",
  database="thirty_days_of_python"
)

try:
  mydb.start_transaction()

  sql = "INSERT INTO students (name, country, city, age) VALUES (%s, %s, %s, %s)"
  val = ("李雷", "中国", "北京", 30)
  mycursor.execute(sql, val)

  sql_update = "UPDATE students SET age = 18 WHERE name = '李雷'"
  mycursor.execute(sql_update)

  mydb.commit()

except:
  mydb.rollback()

本文介绍了如何使用Python连接MySQL数据库,并使用Python执行MySQL的增、删、改、查操作。可以看到Python操作MySQL还比较简单,基本上就是对SQL语句游标语句执行操作。在实践中,我们可以根据具体的需求,灵活使用MySQL提供的功能来操作数据库。同时,在编写Python程序时,也可以使用Python的各种库和函数,来简化和优化操作数据库的代码。

💻 第28天练习

  1. 自己搭建完成本地MYSQL服务
  2. 练习实例中所有的python sql操作
  3. 使用python其他第三方库完成同样的mysql数据库操作

参考联系答案:exerces.py

🎉 CONGRATULATIONS ! 🎉

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dsco Dropship EDI需求分析

供应商要想从Dsco处通过EDI获取订单&#xff0c;需要部署自己的EDI系统&#xff0c;与Dsco的EDI供应商CommerceHub 建立连接&#xff0c;分为两个方向&#xff1a; 1.从CommerceHub 的 Dsco 平台获取 EDI 850 采购订单 2.向Dsco发送库存&#xff08;846&#xff09;、订单状态…

中仕公考:2024年安徽省直事业单位发布公告

2024年度安徽省直事业单位统一招聘发布公告&#xff0c;具体考试时间如下&#xff1a; 报名时间&#xff1a;2024年3月5日9.00-3月11日18.00 缴费时间&#xff1a;2024年3月13日18.00前 打印准考证时间&#xff1a;2024年3月27日-3月29日 笔试时间&#xff1a;2024年3月30日…

实现前端开发几个常用技巧

如何知道iframe下载完成 定时器轮询监听readyState的状态&#xff0c;如果是 complete 或者 interactive 说明文件加载完成。 常用的全屏居中 JS 函数 JS实现deepCopy 生成星级评分 JS数组扁平化之简单方法实现 toString 优点&#xff1a;简单&#xff0c;方便&#xff0c;对…

大势智慧黄先锋:现实世界数字重建 拥抱AI 擘画自主可控的三维画卷

来源&#xff1a;中国地理信息产业协会 实景三维涉及到大面积、高精度的地理空间信息数据&#xff0c;然而早期国内99%以上的实景三维数据制作测绘单位都基于国外软件进行三维重建&#xff0c;如此重要的工作大量使用国外软件&#xff0c;如何确保国家地理空间信息的安全&#…

MAC M1 安装mongodb7.0.5 版本

1、进入官网 Download MongoDB Community Server | MongoDBDownload MongoDB Community Server non-relational database to take your next big project to a higher level!https://www.mongodb.com/try/download/community 2、选择版本 3、下载后解压 放到 /usr/local 并修改…

C语言的数据存储详解

C语言数据存储 文章目录 C语言数据存储类型的基本归类类型的意义 数据在内存中的存储整形在内存中的存储大小端整形提升和截断 浮点型在内存中的存储浮点型的存储规则E的不同情况 运用 类型的基本归类 有无符号的意义&#xff1a;生活中有写数据是没有符号之分的&#xff0c;将…

DolphinScheduler——蔚来汽车数据治理开发平台的应用改造

目录 一、业务痛点 二、应用现状 三、技术改造 3.1 稳定性 3.1.1 滚动重启黑名单机制精准路由 3.2 易用性 依赖节点优化 补数任务优化 多 SQL 执行 原文大佬的这篇基于调度系统的数据治理案例有借鉴意义&#xff0c;这里摘抄下来用作学习和知识沉淀。 一、业务痛点 蔚…

lazada、速卖通、亚马逊店铺需要补单来稳定出单率吗?

亚马逊、速卖通、Lazada、shoppe、速卖通、敦煌网、Temu、shein、阿里国际、卖家如何保证店铺出单稳定?在竞争激烈的平台上&#xff0c;保持店铺的稳定出单是每个卖家都追求的目标。为了实现这一目标&#xff0c;卖家需要综合考虑产品、运营、客户服务等多个方面的因素&#x…

刘志雄:新产品市场+新智造模式,构建“声音+”产业创新生态 | 演讲嘉宾公布

随着科技的飞速发展&#xff0c;新技术、新的应用场景不断涌现&#xff0c;也影响着“声音”产业未来的发展方向。如何应对市场变化&#xff0c;满足市场的多样化需求&#xff1f;如何应用新产品市场、智造新模式去构造“声音”产业创新生态呢&#xff1f;请到GAS2024一探究竟。…

ElasticSearch之Completion Suggester

写在前面 通过completion suggester可以实现如下的效果&#xff1a; 其实就是做的like xxx%这种。通过FST这种数据结构来存储&#xff0c;实现快速的前缀匹配&#xff0c;并且可以将es所有的数据加载到内存中所以速度completion的查询速度非常快。 需要注意&#xff0c;如果…

2024最新版,Android开发教程入门

真正最能锻炼能力的便是直接去阅读源码&#xff0c;不仅限于阅读Android系统源码&#xff0c;还包括各种优秀的开源库。 由于整个文档比较全面&#xff0c;内容比较多&#xff0c;篇幅不允许&#xff0c;下面以截图方式展示 。 深入解析微信 MMKV 源码 初始化获取修改删除读取…

利用Quartz实现复杂的任务调度

第一章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;任务调度&#xff0c;简而言之&#xff0c;就是按照预定计划自动执行任务的过程。不管是数据库备份、报表生成还是发送定时邮件&#xff0c;它们都需要一个可靠的任务调度系统来保证按时完成。 那么&#xff0…

【学习笔记】深度学习实战 | LeNet

简要声明 学习相关网址 [双语字幕]吴恩达深度学习deeplearning.aiPapers With CodeDatasets 深度学习网络基于PyTorch学习架构&#xff0c;代码测试可跑。本学习笔记单纯是为了能对学到的内容有更深入的理解&#xff0c;如果有错误的地方&#xff0c;恳请包容和指正。 参考文献…

基于ssm网络办公系统论文

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

【Linux】Linux安装

Linux安装&#xff08;保姆级教程&#xff09; 准备工具下载链接 Linux镜像系统官网&#xff08;Centos版本&#xff09;&#xff1a;https://www.centos.org/ 虚拟机下载官网&#xff1a;https://www.vmware.com 注&#xff1a;Linux是一种系统统称&#xff0c;就像Windows…

小米科技分享:深入解析阿里巴巴面试题之SQL查询

大家好,我是小米,今天要和大家分享的是在阿里巴巴面试中常见的SQL查询题目。SQL查询是数据库领域中的基础,但也是一个非常重要的技能,无论是在面试中还是实际工作中,都有着举足轻重的地位。让我们一起深入了解一下吧! SQL语句的执行过程 首先,我们来了解一下SQL语句的执…

【Java】基本数据类型、包装类与字符串间的转换 例题

写在前面&#xff1a; 关于这道题&#xff0c;初见感觉有点cpu烧坏了&#xff0c;准确来说是看了网上的一些讲解都感觉不尽人意。自己整理了一下&#xff0c;希望能帮助到大家。 题目&#xff1a; 如下两个题目输出结果相同吗&#xff1f;各是什么。 Object o1 true ? new…

悄悄告诉你,干洗店60%业务都在自这里

洗衣管理软件&#xff0c;让生活更轻松&#xff01;无论是洗衣还是洗鞋&#xff0c;这款软件都能帮你轻松搞定一切&#xff1a;预约、洗涤进度查询、顾客反馈&#xff0c;一切尽在指尖。 店家使用软件智能管理收衣收鞋&#xff0c;从接收、洗涤到通知顾客取衣&#xff0c;全程自…

【UE 材质】制作加载图案(2)

在上一篇&#xff08;【UE 材质】制作加载图案&#xff09;基础上继续实现如下效果的加载图案 效果 步骤 1. 复制一份上一篇制作的材质并打开 2. 添加“Floor”节点向下取整 除相同的平铺数 此时的效果如下 删除如下节点 通过“Ceil”向上取整&#xff0c;参数“Tiling”默认…

4、正则表达式、本地存储

一、正则表达式 1、定义 用事先定义好的一些特定字符&#xff0c;这样的字符组合&#xff0c;组合成一个“规则字符串” 2、正则的组成 特殊字符 字母、数字、下划线、中文、特殊字符… 元字符&#xff08;常用&#xff09; 1、\d 匹配至少有一个数字 var reg /\d/ /…