【数据库】基于PyMySQL连接并使用数据库(代码示例)

这里写目录标题

    • 前言
    • 1、安装PyMySQL
    • 2、打开要连接的数据库
    • 3、创建数据库连接
    • 4、获取数据库版本
    • 5、新建数据库表
    • 6、向表中插入数据
    • 7、查询表中的相关记录
    • 8、更新表中的相关记录
    • 9、删除表中的相关记录
    • 10、关闭游标和连接
    • 完整代码


前言

本文演示了如何基于PyMySQL使用代码来创建数据库连接、新建数据库表、向表中插入数据、查询表中的相关记录、更新表中的相关记录、删除表中的相关记录等操作,最后,要记得关闭游标和连接。


1、安装PyMySQL

如果是使用Anaconda来管理包和Python环境,则可以使用 s t e p 1 step1 step1 s t e p 2 step2 step2来创建一个独立的环境方便管理;如果不是可直接执行 s t e p 3 step3 step3将PyMySQL包安装到本地已有的Python环境中。

s t e p 1 : step1: step1创建一个虚拟环境

conda create -n use_mysql python=3.6

s t e p 2 : step2: step2激活虚拟环境

conda activate use_mysql

s t e p 3 : step3: step3使用清华源安装PyMySQL

pip install PyMySQL -i https://pypi.tuna.tsinghua.edu.cn/simple

2、打开要连接的数据库

我这里使用的是Navicat Premium 16连接一个名称为 “test” 的数据库。
在这里插入图片描述


3、创建数据库连接

import pymysql

# 设置数据库连接参数
db_params = {
    'host': 'localhost',         # 数据库服务器地址
    'user': 'root',              # 数据库用户名
    'password': '123456',        # 数据库密码
    'db': 'test',                # 要连接的数据库名称
    'charset': 'utf8mb4',        # 编码方式
}

# 创建数据库连接
try:
    connection = pymysql.connect(**db_params)
    print("Database connection successful.")
except pymysql.MySQLError as e:
    print(f"Error connecting to MySQL Platform: {e}")

运行代码,连接成功后控制台会打印输出 “Database connection successful.”


4、获取数据库版本

# 获取游标对象
cursor = connection.cursor()

# 获取数据库版本
cursor.execute("SELECT VERSION();")
data = cursor.fetchone()
print("Database version: %s " % data)

5、新建数据库表

# 检查表student是否已经存在于数据库test中
cursor.execute("SHOW TABLES LIKE 'STUDENT'")
result = cursor.fetchone()
if result:
    print("Table 'STUDENT' already exists.")
else:
    # 创建表
    cursor.execute("""
    CREATE TABLE STUDENT (
        num  INT NOT NULL,
        name  CHAR(20),
        age INT,  
        sex CHAR(10)
    )
    """)
    connection.commit()
    print("Table 'STUDENT' created successfully.")

6、向表中插入数据

# 向student表中插入数据
insert_sql_1 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (1, 'zhangsan', 20, 'Man')"
insert_sql_2 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (2, 'lisi', 18, 'Woman')"
insert_sql_3 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (3, 'wangwu', 21, 'Man')"
insert_sql_4 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (4, 'zhaoliu', 19, 'Woman')"
try:
    cursor.execute(insert_sql_1)
    cursor.execute(insert_sql_2)
    cursor.execute(insert_sql_3)
    cursor.execute(insert_sql_4)
    connection.commit()
    print("Successfully inserted data into the table.")
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

运行代码后,回到 Navicat Premium 16 查看插入的数据。
在这里插入图片描述


7、查询表中的相关记录

# 查询student表中name字段值为'zhangsan'的所有记录
query_sql = "SELECT * FROM student WHERE name='zhangsan'"
try:
    cursor.execute(query_sql)
    results = cursor.fetchall()  # 获取所有查询结果
    print("The query results are as follows:")
    for row in results:
        print(row)  # 打印每一行结果
    connection.commit()
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

8、更新表中的相关记录

# 更新student表中num字段值为3的记录的name字段为'newname':
update_sql = "UPDATE student SET name = 'newname' WHERE num = 3"
try:
    cursor.execute(update_sql)
    connection.commit()
    print("Successfully updated data in the table.")
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

9、删除表中的相关记录

# 删除student表中num字段值为4的所有记录
delete_sql = "DELETE FROM student WHERE num = 4"
try:
    cursor.execute(delete_sql)
    connection.commit()
    print("Successfully deleted data from the table.")
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

10、关闭游标和连接

# 关闭游标和连接
cursor.close()
connection.close()

完整代码

import pymysql

# 设置数据库连接参数
db_params = {
    'host': 'localhost',         # 数据库服务器地址
    'user': 'root',              # 数据库用户名
    'password': '123456',      # 数据库密码
    'db': 'test',                # 要连接的数据库名称
    'charset': 'utf8mb4',        # 编码方式
}

# 创建数据库连接
try:
    connection = pymysql.connect(**db_params)
    print("Database connection successful.")
except pymysql.MySQLError as e:
    print(f"Error connecting to MySQL Platform: {e}")

# 获取游标对象
cursor = connection.cursor()

# 获取数据库版本
cursor.execute("SELECT VERSION();")
data = cursor.fetchone()
print("Database version: %s " % data)

# 检查表student是否已经存在于数据库test中
cursor.execute("SHOW TABLES LIKE 'STUDENT'")
result = cursor.fetchone()
if result:
    print("Table 'STUDENT' already exists.")
else:
    # 创建表
    cursor.execute("""
    CREATE TABLE STUDENT (
        num  INT NOT NULL,
        name  CHAR(20),
        age INT,  
        sex CHAR(10)
    )
    """)
    connection.commit()
    print("Table 'STUDENT' created successfully.")

# 向student表中插入数据
insert_sql_1 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (1, 'zhangsan', 20, 'Man')"
insert_sql_2 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (2, 'lisi', 18, 'Woman')"
insert_sql_3 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (3, 'wangwu', 21, 'Man')"
insert_sql_4 = "INSERT INTO STUDENT(num, name, age, sex) VALUES (4, 'zhaoliu', 19, 'Woman')"
try:
    cursor.execute(insert_sql_1)
    cursor.execute(insert_sql_2)
    cursor.execute(insert_sql_3)
    cursor.execute(insert_sql_4)
    connection.commit()
    print("Successfully inserted data into the table.")
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

# 查询student表中name字段值为'zhangsan'的所有记录
query_sql = "SELECT * FROM student WHERE name='zhangsan'"
try:
    cursor.execute(query_sql)
    results = cursor.fetchall()  # 获取所有查询结果
    print("The query results are as follows:")
    for row in results:
        print(row)  # 打印每一行结果
    connection.commit()
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

# 更新student表中num字段值为3的记录的name字段为'newname':
update_sql = "UPDATE student SET name = 'newname' WHERE num = 3"
try:
    cursor.execute(update_sql)
    connection.commit()
    print("Successfully updated data in the table.")
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

# 删除student表中num字段值为4的所有记录
delete_sql = "DELETE FROM student WHERE num = 4"
try:
    cursor.execute(delete_sql)
    connection.commit()
    print("Successfully deleted data from the table.")
except Exception as e:  # 捕获所有异常
    print(f"An error occurred: {e}")
    connection.rollback()

# 关闭游标和连接
cursor.close()
connection.close()

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

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

相关文章

线性模型--普通最小二乘法

线性模型 一、模型介绍二、用于回归的线性模型2.1 线性回归(普通最小二乘法) 一、模型介绍 线性模型是在实践中广泛使用的一类模型,该模型利用输入特征的线性函数进行预测。 二、用于回归的线性模型 以下代码可以在一维wave数据集上学习参…

java内存模型介绍

Java内存模型(Java Memory Model,JMM)是一种规范,它定义了Java虚拟机(JVM)如何在内存中存储和访问Java对象的方式,以及多个线程如何访问这些对象时的规则。它的主要目标是定义程序中的各个线程如…

Python语言绘制好看的小提琴图、箱形图、散点图、山脊图和柱状图等等

废话不多说,今天给大家分享一个,使用python绘制小提琴图、箱形图、散点图、山脊图和柱状图等等 图中的数据是随机生成的,图例,图注以及坐标题目各种信息,具体内容大家可以自己修改~ 效果图如下所示 👇&a…

ML307R OpenCPU 数据保存文件系统fs使用

一、函数介绍 二、实现数据保存 三、代码下载地址 一、函数介绍 以下是cm_fs.h里面的函数介绍 /*** brief 文件指针定位** param [in] fd 文件描述符* param [in] offset 指针偏移量* param [in] base 偏移起始点,CM_FS_SEEK_SET:文件开头 CM_FS…

Keras深度学习框架第二十讲:使用KerasCV中的Stable Diffusion进行高性能图像生成

1、绪论 1.1 概念 为便于后文讨论,首先进行相关概念的陈述。 Stable Diffusion:Stable Diffusion 是一个在图像生成领域广泛使用的技术,尤其是用于文本到图像的转换。它基于扩散模型(Diffusion Models),这…

leecode 637 二叉树的层平均值

leetcode 二叉树相关-层序遍历专题 二叉树的层序遍历一般来说,我们是利用队列来实现的,先把根节点入队,然后在出队后将其对应的子节点入队,然后往复此种操作。相比于二叉树的遍历递归,层序遍历比较简单,有…

AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks

AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks 2012 研究背景 认识数据集:ImageNet的大规模图像识别挑战赛 LSVRC-2012:ImageNet Large Scale Visual Recoanition Challenge 类别训练数据测试数据图片格式Mnist1…

word 全文中 英文字体 和 样式的字体 莫名奇妙地 被改成 “等线”

word全文中英文字体和样式的字体莫名奇妙地被改成“等线” sm word又抽风了,改完论文保存后打开突然发现全文字体都不对劲,吓得冷汗直冒:虽然我用git管理了论文版本,但是只有比较大的修改我才上传了,刚刚修了几个小时…

Excel必知必会

文章目录 基础概念数据格式选择区域内指定格式数据多行筛选数据转换数据格式固定首行和首列在滚动时一直显示指定列数据符合预期批量填充公式 函数VLOOKUP函数 基础概念 数据格式 文本,数值(默认值0),(逻辑值&#x…

OceanBase的存储架构与传统LSM-Tree架构的异同|OceanBase数据转储合并技术解读(二)

前篇博文将OceanBase的存储架构巧妙地与自然界中的“水生态”进行了类比,今日我们转变视角,聚焦在与拥有相同LSM-Tree架构的其他产品的比较,深入探讨OceanBase相较于它们所展现出的独特性能。 众所周知,OceanBase数据库的存储引擎…

HQL面试题练习 —— 合并数据

题目来源:京东 目录 1 题目2 建表语句3 题解 1 题目 已知有数据 A 如下,请分别根据 A 生成 B 和 C。 数据A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

mac操作系统下,docker登录nexus私库,提示不支持https协议的错误

一、背景 我们使用nexus搭建了一个Docker Registry私有仓库,在Mac操作系统,在推送本地镜像到私库前,要求我们登录私库,报错如下: docker login 192.168.5.6:8086 -u username -p passwordWARNING! Using --password …

Python轻松玩转excel操作指导

目录 一、一图概览 二、表格操作 三、内容操作 四、单元格操作 五、Pandas实现表格操作 六、常见场景示例 一、一图概览 ​ ​本文主要对openpyxl库的常用表格操作进行了梳理,熟练的运用后可极大地提升工作效率。 二、表格操作 #创建一个表格sheet.xlsx #…

[论文阅读笔记31]Mamba (Selective Structured State Space Model) 及其应用

最近想学一下Mamba模型,奈何看了很多视频还是感觉一知半解,因此做一篇笔记,顺便介绍一下Mamba结构作为CV backbone和时间序列预测领域的应用。 论文1. Mamba: Linear-Time Sequence Modeling with Selective State Spaces 0. Abstract 现有…

linux查看是否被入侵(一)

1、查看当前系统状态 [rootbastion-IDC ~]#top #一般挖矿等病毒点用CPU比较大 2、查看当前登录用户(w\who) 3、检查系统日志 检查系统错误登陆日志,统计IP重试次数 [rootbastion-IDC ~]# lastb 4、查看近期用户登录情况 [rootkvm01 ~]# last -n 5 #-n 5 表示…

【同构字符串】python

思路: 先记录同一个值出现的次数,再将字典中的值取出,比较2个列表即可 代码: class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dit1dict()dit2dict()for i in range(len(s)):if s[i] not in dit1:dit1[s[i…

入门五(项目介绍及登录和发布需求)

软件缺陷判定标准 项目中缺陷的管理流程 使用Excel对于缺陷进行管理 使用工具管理缺陷 一、项目背景 传智作为一个IT教育机构,拥有自己开发且实际运营的产品; 将开发和运营的技术作为授课的内容,对于学员而言学到的都是一手的真实案例和…

vue data中的return

vue 的data return 是干啥的呢,vue中页面中绑定的变量都要放在data的return中,可以赋值,值可在script中改,修改引用就用this了 如果不使用return包裹的数据会在项目的全局中可见,会造成变量污染; 使用retu…

Mixed-precision计算原理(FP32+FP16)

原文: https://lightning.ai/pages/community/tutorial/accelerating-large-language-models-with-mixed-precision-techniques/ This approach allows for efficient training while maintaining the accuracy and stability of the neural network. In more det…

Android BACK键和HOME键应用差异详解

文章目录 1、应用层分析1.1 BACK键功能实现 1.2 HOME键功能实现 1.3 BACK键与HOME键的区别 2、系统层分析2.1 BACK键的处理2.2 HOME键的处理2.3 代码分析BACK键HOME键BACK键的系统代码分析HOME键的系统代码分析BACK键HOME键 3、优缺点分析3.1 BACK键3.2 HOME键 4、项目中的使用…