03 Python进阶:MySQL - mysql-connector

mysql-connector安装

在这里插入图片描述

要在 Python 中使用 MySQL 数据库,你需要安装 MySQL 官方提供的 MySQL Connector/Python。下面是安装 MySQL Connector/Python 的步骤:

  1. 首先,确保你已经安装了 Python,如果没有安装,可以在 Python 官网(https://www.python.org)下载并安装最新版本的 Python。

  2. 打开命令行或终端,在命令行中运行以下命令安装 MySQL Connector/Python:

在这里插入图片描述

这将会从 PyPI 上下载并安装 MySQL Connector/Python。

注意:如果你的 MySQL 是 8.0 版本,密码插件验证方式发生了变化,早期版本为 mysql_native_password,8.0 版本为 caching_sha2_password,所以需要做些改变:先修改 my.ini 配置:[mysqld]
default_authentication_plugin=mysql_native_password
然后在 mysql 下执行以下命令来修改密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

创建数据库连接

安装完成后,你就可以在 Python 脚本中使用 MySQL Connector/Python 来连接和操作 MySQL 数据库了。下面是一个简单的示例代码:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建游标对象
mycursor = mydb.cursor()# 执行 SQL 查询
mycursor.execute("SELECT * FROM mytable")# 获取查询结果
for x in mycursor:print(x)

在上面的代码中,你需要将 hostuserpassworddatabase 替换为实际的数据库连接信息,然后根据需求执行相应的 SQL 查询。

这样,你就可以在 Python 中使用 MySQL Connector/Python 来连接、查询和操作 MySQL 数据库了。

创建数据库

在 Python 中,你可以使用 MySQL Connector/Python 来创建数据库。以下是一个简单的示例代码:

import mysql.connector# 连接到 MySQL 服务器
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword"
)# 创建一个名为 'mydatabase' 的数据库
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")

在上面的示例中,你需要将 hostuserpassword 替换为实际的数据库连接信息。运行这段代码后,将在 MySQL 服务器上创建一个名为 mydatabase 的数据库。

确保你的账户有足够的权限来创建数据库。另外,如果你想指定数据库的字符集和校对规则,可以在创建数据库时加上参数,例如:

mycursor.execute("CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")

这将创建一个使用 UTF-8 字符集和 utf8mb4_unicode_ci 校对规则的数据库。

创建数据表

在 Python 中使用 MySQL Connector/Python 创建数据表的方法与在 MySQL 命令行中创建数据表的方法类似。以下是一个示例代码,演示如何在 Python 中创建一个名为 users 的数据表:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"  # 已存在的数据库
)# 创建一个数据表
mycursor = mydb.cursor()mycursor.execute("CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")

在上面的示例中,我们连接到了已存在的数据库 mydatabase,然后使用 CREATE TABLE 语句创建了一个名为 users 的数据表,其中包含 idnameage 三个字段。

你可以根据需要定义数据表的字段及其类型。运行这段代码后,将在数据库中创建一个名为 users 的数据表。

注意:确保你具有足够的权限来创建数据表。另外,你也可以为表中的列指定约束、默认值等其他属性,具体语法可以根据需要调整。

主键设置

在 MySQL 中,可以使用 PRIMARY KEY 来定义表中的主键。在 Python 中使用 MySQL Connector/Python,也可以通过以下方式为数据表设置主键:

# 创建一个数据表,并指定主键
mycursor.execute("CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")

在上面的示例中,我们在 id 字段上使用了 AUTO_INCREMENT PRIMARY KEY,这意味着 id 是主键,并且会自动递增

如果你想在多个字段上定义复合主键,可以使用如下方式:

# 创建一个数据表,并指定复合主键
mycursor.execute("CREATE TABLE users (id1 INT, id2 INT, PRIMARY KEY (id1, id2))")

在这个例子中,我们将 id1id2 作为复合主键。无论是单个字段还是复合主键,都需要确保它们能唯一标识表中的每一行数据。

通过以上方法,你可以在 Python 中使用 MySQL Connector/Python 为数据表设置主键。如果需要更复杂的约束或索引,也可以通过相应的 SQL 语句进行设置。

插入数据

当使用 MySQL Connector/Python 向数据库中的数据表插入数据时,可以使用如下方法:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 插入数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
val = ("John", 30)
mycursor.execute(sql, val)# 提交执行
mydb.commit()print(mycursor.rowcount, "记录插入成功。")

在上面的示例中,我们向名为 users 的数据表中插入了一条数据,这条数据包含了 nameage 两个字段的值。通过使用 %s 占位符和元组 val 传递数据,我们可以避免 SQL 注入攻击,并使代码更加安全。

在执行 execute() 后,我们调用了 commit() 方法来提交事务。只有在调用 commit() 后,数据才会真正被插入到数据库中。

以上就是使用 MySQL Connector/Python 向数据表插入数据的简单示例。你可以根据需要修改 val 中的数据以及 SQL 语句来插入更多的记录。

批量插入

如果需要批量插入多条数据到数据库中,可以使用 MySQL Connector/Python 的 executemany() 方法。以下是一个示例代码,演示如何批量插入多条数据:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 插入多条数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
values = [("Alice", 25),("Bob", 30),("Charlie", 28)
]mycursor.executemany(sql, values)# 提交执行
mydb.commit()print(mycursor.rowcount, "记录插入成功。")

在上面的示例中,我们定义了一个包含多个元组的 values 列表,每个元组表示要插入的一条数据。然后,我们使用 executemany() 方法将这些数据批量插入到数据库中。

与单条插入相同,执行 commit() 语句来提交事务,确保数据被正确插入到数据库中。

通过这种方式,你可以方便地批量插入多条数据到数据库中。记得根据实际需求调整数据和 SQL 语句。

查询数据

无条件查询

要在 Python 中使用 MySQL Connector/Python 查询数据,你可以通过以下方式实现:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行查询
mycursor.execute("SELECT * FROM users")# 获取查询结果
result = mycursor.fetchall()
for row in result:print(row)

在上面的示例中,我们首先连接到了数据库,然后创建了一个游标对象。游标对象允许我们执行 SQL 查询并获取结果。在这个例子中,我们执行了一个简单的 SELECT 查询来获取 users 表中的所有记录,并通过 fetchall() 方法获取查询结果。

最后,我们遍历查询结果,并打印出每一行数据。

条件查询

如果需要添加查询条件或者只获取部分字段的数据,可以根据需要修改 SQL 查询语句。
要在 Python 中进行带有条件的查询,只需在 SQL 查询语句中添加条件即可。以下是一个示例代码,演示如何使用 MySQL Connector/Python 进行条件查询:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行带有条件的查询
sql = "SELECT * FROM users WHERE age > %s"
val = (25, )  # 查询年龄大于25的用户
mycursor.execute(sql, val)# 获取查询结果
result = mycursor.fetchall()
for row in result:print(row)

在上面的示例中,我们执行了一个带有条件的查询,通过 WHERE 子句筛选出了年龄大于25的用户。我们将条件值(这里是 25)作为元组传递给 execute() 方法,以避免 SQL 注入攻击。

你可以根据需要修改查询条件,例如更改比较运算符、添加多个条件等。通过在 SQL 查询语句中灵活添加条件,你可以实现不同类型的查询操作。

删除记录

要在 Python 中使用 MySQL Connector/Python 删除记录,你可以按照以下步骤进行操作:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行删除操作
sql = "DELETE FROM users WHERE name = %s"
val = ("Alice",)  # 删除名为 Alice 的记录
mycursor.execute(sql, val)# 提交执行
mydb.commit()print(mycursor.rowcount, "条记录已被删除。")

在上面的示例中,我们执行了一个删除操作,通过 DELETE FROM 语句删除了名为 “Alice” 的记录。类似于条件查询,我们将需要删除的记录的条件值作为元组传递给 execute() 方法。

在执行 delete 操作后,一定要调用 commit() 方法提交事务,确保删除操作生效。如果不调用 commit(),记录将不会被真正删除。

表记录清空

要在Python中使用MySQL Connector/Python清空表中的所有记录,你可以按照以下步骤进行操作:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行清空表记录操作
sql = "TRUNCATE TABLE yourtablename"
mycursor.execute(sql)print("表记录已成功清空")

在上面的示例中,我们使用TRUNCATE TABLE语句清空了名为"yourtablename"的表中的所有记录。这条语句会立即删除表中的所有记录,但是保留表结构不变。请谨慎操作,因为一旦清空操作完成,将无法恢复数据。

请确保你明确了解清空表记录的后果,并在需要清空表记录时再执行该操作

更新表数据

在 Python 中使用 MySQL Connector/Python 更新表数据的方法如下所示:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行更新操作
sql = "UPDATE users SET age = %s WHERE name = %s"
val = (32, "Alice")  # 更新名为 Alice 的记录的年龄为 32
mycursor.execute(sql, val)# 提交执行
mydb.commit()print(mycursor.rowcount, "条记录已被更新。")

在上面的示例中,我们执行了一个更新操作,通过 UPDATE 语句将名为 “Alice” 的记录的年龄更新为 32。我们将更新操作的条件值和新值作为元组传递给 execute() 方法。

和删除操作类似,需要调用 commit() 方法提交事务,确保更新操作生效。

删除表

要在Python中使用MySQL Connector/Python删除表,你可以按照以下步骤进行操作:

import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行删除表操作
sql = "DROP TABLE IF EXISTS yourtablename"
mycursor.execute(sql)print("表已成功删除")

在上面的示例中,我们执行了一个删除表的操作,通过DROP TABLE语句删除了名为"yourtablename"的表。如果你确信表存在可以不添加IF EXISTS部分。

在执行DROP TABLE操作后,表将被立即删除,所以请谨慎操作。该操作无法撤销,并且会永久删除表及其数据,因此请在明确知道删除目的时再执行该操作。

数据库事务

使用 mysql-connector 库执行事务与使用 pymysql 类似,需要在 Python 中连接到 MySQL 数据库,并利用 connection 对象的方法来执行事务的提交和回滚。

以下是一个示例代码,演示了如何在 mysql-connector 中执行事务:

import mysql.connector# 连接到数据库
connection = mysql.connector.connect(host='your_host',user='your_username',password='your_password',database='your_database_name'
)try:# 开始事务connection.start_transaction()# 创建游标cursor = connection.cursor()# 执行多个 SQL 命令,这里仅作示例insert_sql_1 = "INSERT INTO table1 (column1, column2) VALUES (%s, %s)"insert_sql_2 = "INSERT INTO table2 (column3, column4) VALUES (%s, %s)"# 执行第一个插入操作cursor.execute(insert_sql_1, ('value1', 'value2'))# 执行第二个插入操作cursor.execute(insert_sql_2, ('value3', 'value4'))# 提交事务connection.commit()except mysql.connector.Error as e:# 如果出现异常,回滚事务connection.rollback()print(f"An error occurred: {e}")finally:# 关闭游标和连接cursor.close()connection.close()

在上述示例中,我们首先通过 connection.start_transaction() 开启了一个事务。然后,在 try 块中执行了两个插入操作。如果所有操作顺利完成,就会通过 connection.commit() 提交事务。如果其中任何一步出现了异常,connection.rollback() 会回滚事务,使所有操作都不会生效。

通过使用事务,可以确保在执行一系列相关操作时,要么全部成功,要么全部失败。这对于确保数据的完整性和一致性非常重要。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

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

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

相关文章

从零到一:基于 K3s 快速搭建本地化 kubeflow AI 机器学习平台

背景 Kubeflow 是一种开源的 Kubernetes 原生框架,可用于开发、管理和运行机器学习工作负载,支持诸如 PyTorch、TensorFlow 等众多优秀的机器学习框架,本文介绍如何在 Mac 上搭建本地化的 kubeflow 机器学习平台。 注意:本文以 …

js表达式

js 数据: 字面量 1 123 变量 a 表达式 12 2*2 a&&b 表达式都会有一个返回结果。表达式仍然是数据,所有可以写字面量,变量的地方都可以写表达式 在JavaScript中,表达式中的运算符具有不同的优先级,这决定…

【.NET全栈】ZedGraph图表库的介绍和应用

文章目录 一、ZedGraph介绍ZedGraph的特点ZedGraph的缺点使用注意事项 二、ZedGraph官网三、ZedGraph的应用四、ZedGraph的高端应用五、、总结 一、ZedGraph介绍 ZedGraph 是一个用于绘制图表和图形的开源.NET图表库。它提供了丰富的功能和灵活性,可以用于创建各种…

国外媒体推广软文宣发:促进海外宣发新风尚,迈向国际舞台

大舍传媒http://www.dashemeijie.com 序言 伴随全球经济一体化发展趋向,越来越多的中国企业希望在国际舞台上表现自己的总体水平。而国外媒体软文发稿作为一种全新的海外宣传方式,正逐渐成为促进海外宣发新风尚的主要常用工具。接下来我们就探讨国外媒…

uniapp自定义卡片轮播图

效果图 1、封装组件 <template><view><!-- 自定义卡片轮播 --><swiper class"swiperBox" :previous-margin"swiper.margin" :next-marginswiper.margin :circular"true"change"swiperChange"><swiper-ite…

Vue项目中 安装及使用Sass(scss)

普通方法 一、安装使用scss 1. 安装 scss npm install scss --save2. 安装 node-sass 和 sass-loader sass-loader&#xff1a;把 sass编译成css node-sass&#xff1a;nodejs环境中将sass转css 提示&#xff1a;限制 node-sass&#xff0c;sass-loader 版本号&#xff0c;…

华为服务器RAID配置教程 服务器硬盘故障处理帮助 浪潮RAID配置教程 磁盘阵列配置通用教程

前言&#xff08;本文档持续更新&#xff09; 本文主要记录服务器配置RAID&#xff08;磁盘阵列&#xff09;过程中存在的细节问题及官方文档无法解决的问题的解决方案 配置环境 华为 RH2288 v3服务器配置RAID组 如何快速配置 1.找到服务器品牌的阵列卡型号&#xff0c;找不到…

了解 Solidity 语言:构建智能合约的首选编程语言

了解 Solidity 语言&#xff1a;构建智能合约的首选编程语言 Solidity 是一种用于编写智能合约的高级编程语言&#xff0c;广泛应用于以太坊和其他以太坊虚拟机&#xff08;EVM&#xff09;兼容的区块链平台。它是以太坊智能合约的首选语言之一&#xff0c;具有丰富的功能和灵活…

hexo博客7:构建简单的多层安全防御体系

【hexo博客7】构建简单的多层安全防御体系 写在最前面理解全面安全策略的重要性防御常见的网络攻击1. SQL注入攻击2. 文件上传漏洞3. 跨站脚本攻击&#xff08;XSS&#xff09;4. 跨站请求伪造&#xff08;CSRF&#xff09;5. 目录遍历/本地文件包含&#xff08;LFI/RFI&#x…

基础篇3 浅试Python爬虫爬取视频,m3u8标准的切片视频

浅试Python爬取视频 1.页面分析 使用虾米视频在线解析使用方式&#xff1a;https://jx.xmflv.cc/?url目标网站视频链接例如某艺的视频 原视频链接 解析结果: 1.1 F12查看页面结构 我们发现页面内容中什么都没有&#xff0c;video标签中的src路径也不是视频的数据。 1.2 …

SCP 从Linux快速下载文件到Windows本地

需求&#xff1a;通过mobaxterm将大文件拖动到windows本地速度太慢。 环境&#xff1a;本地是Windows&#xff0c;安装了Git。 操作&#xff1a;进入文件夹内&#xff0c;鼠标右键&#xff0c;点击Git Bash here&#xff0c;然后输入命令即可。这样的话&#xff0c;其实自己本…

LabVIEW电力设备在线监测系统

LabVIEW电力设备在线监测系统 在电力行业中&#xff0c;变电站的稳定运行对于保障电力系统的安全性和可靠性至关重要。开发了一种基于LabVIEW软件开发的变电站电力设备在线监测系统&#xff0c;实时监控变电站内部的电力设备状态&#xff0c;确保电力传输的高效与安全。通过对…

Hadoop和zookeeper集群相关执行脚本(未完,持续更新中~)

1、Hadoop集群查看状态 搭建Hadoop数据集群时&#xff0c;按以下路径操作即可生成脚本 [test_1analysis01 bin]$ pwd /home/test_1/hadoop/bin [test_01analysis01 bin]$ vim jpsall #!/bin/bash for host in analysis01 analysis02 analysis03 do echo $host s…

【flutter封装图片/视频选择控件】

引入库 wechat_assets_picker: ^6.0.5 、video_player: ^2.5.1 # 视频播放、 flutter_screenutil: ^5.7.0 import dart:async; import dart:io; import package:generated/l10n.dart; import package:jade/configs/PathConfig.dart; import package:jade/customWidget/addImag…

Linux:ip和ip协议的初步认识

文章目录 ip协议基本认识ip协议的报头网段划分ip的类型划分 ip协议基本认识 前面对于TCP的内容已经基本结束了&#xff0c;那么这也就意味着在传输层也已经结束了&#xff0c;那么下一步要进入的是的是网络层&#xff0c;网络层中也有很多种协议&#xff0c;这里主要进行解析的…

安装Qrcode库的方法最终解答!_Python第三方库

安装Python第三方库Qrcode 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Qrcode库 Qrcode库是一个专门生成二维码的库。它能够让你很容易地创建不同大小、颜色和包含不同类型数据的二维码&#xff0c;支持生成 GIF 动…

力扣2684---矩阵中移动的最大次数(DFS,Java、中等题)

目录 题目描述&#xff1a; 思路描述&#xff1a; 代码&#xff1a; 纯递归&#xff1a; 带有记忆化搜索的递归&#xff1a; 题目描述&#xff1a; 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid &#xff0c;矩阵由若干 正 整数组成。 你可以从矩阵第一列中的 任一 单…

基于ZooKeeper的Kafka分布式集群搭建与集群启动停止Shell脚本

下载Kafka压缩包 下方是Kafka官网下载地址&#xff0c;本文使用Kafka 3.0.0在虚拟机环境中搭建分布式集群。 Apache Kafka Downloads link 虽然在Kafka 2.8.0之后可以使用KRaft模式搭建高可用的集群以提高数据处理效率&#xff0c;但是目前还有许多企业依然使用ZooKeeper搭建K…

Linux驱动学习:从Linux主机nfs共享文件到uboot

第一步&#xff1a;在Linux主机上开启NFS服务&#xff0c;使用如下命令安装NFS服务&#xff1a; sudo apt-get install nfs-kernel-server rpcbind 第二步&#xff1a;创建一个文件夹用于共享&#xff0c;直接以nfs命名就行&#xff1a; 第三步&#xff1a;打开nfs服务配置文…

go库x/text缺陷报告CVE-2022-32149的处理方案

#问题描述 go库 golang.org/x/text &#xff0c;注意这里不是go的源码&#xff0c; 在0.3.8版本之前存在一个缺陷(Vulnerability) 缺陷ID CVE-2022-32149 具体描述 攻击者可以通过制作一个Accept-Language报头来导致拒绝服务。 具体的原因是&#xff0c;在解析这个Accept-L…