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

news2024/9/17 2:16:40

这里写目录标题

    • 前言
    • 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()

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

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

相关文章

异步获取线程执行结果,JDK中的Future、Netty中的Future和Promise对比

JDK中的Future和Netty中的Future、Promise的关系 三者源头追溯 Netty中的Future与JDK中的Future同名,但是是两个不同的接口。Netty中的Future继承自JDK的Future,而Promise又对Netty中的Future进行了扩展。 JDK中的Future源自JUC并发包: Net…

打卡信奥刷题(19)用Scratch图形化工具信奥B3972 [语言月赛 202405] 二进制 题解

进制转换是经典的编程题,尤其是10进制转换为2进制。方法是拿给定的数,不断地除2,将余数放在对应的位置,剩下的数为对应数除2向下取整 [语言月赛 202405] 二进制 题目描述 在介绍十进制转二进制的篇目中,我们总会看到…

一文读懂:http免费升级https

背景: 随着现在全民网络安全意识的日益提升,各个网站需要实现的https数量也随之提升,那么如何将原本网站的http访问方式升级为https呢? 该内容为如何免费将网站的http访问升级为https访问 论https的加密逻辑: 步骤 …

【计算机网络】初识Tcp协议

💻文章目录 📄前言Tcp基础概念Tcp 的报文格式三次握手四次挥手 Tcp的滑动窗口机制概念超时重传机制高速重传 TCP传输控制机制流量控制拥堵控制慢启动 Tcp的性能优化机制延迟应答捎带应答 📓总结 📄前言 TCP三次握手、四次挥手&…

element-ui 实现输入框下拉树组件(2024-05-23)

用element-ui的 el-input&#xff0c;el-tree&#xff0c;el-popover组件组合封装 import url("//unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css"); <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//…

SEO之核心关键词(一)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议新手上云 选择关键词的第一步是确定网站核心关键词。 核心关键词通常就是网站首页的目标关键词。一般来说&#xff0c;整个网站会有很多目标关键词&#xff0c;这些关键…

记一次MySQL执行修改语句超时问题

异常问题 原因分析 这个问题发生在开发环境&#xff0c;怀疑是提交事务时终止项目运行&#xff0c;没有提交该事务&#xff0c;造成死锁 调试该事务时时间太长&#xff0c;为什么说有这个原因呢&#xff0c;因为通过查找日志显示 The client was disconnected by the server …

【二叉树算法题记录】236. 二叉树的最近公共祖先

题目链接 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个…

Day04-Maven,SpringBoot,Tomcat下载及相关配置

1. maven 2. MaVen是一款管理和构建java项目的工具 2.1 概述 mvn -v2.1 配置Maven环境&#xff08;当前工程&#xff09; 全局配置maven 3. SpringBoot 3.1 SpringBoot入门 package com.jingwei.controller;import org.springframework.web.bind.annotation.…

一个和蔼可亲的Python库,用Gooey为你的程序添加GUI

大家好&#xff0c;你有没有遇到过这样的情况&#xff1a;你写了一个非常棒的命令行程序&#xff0c;但当你分享给朋友或同事时&#xff0c;他们却因为害怕命令行而不愿意使用&#xff1f;这时候&#xff0c;一个简洁美观的图形用户界面&#xff08;GUI&#xff09;就派上用场了…

产品经理-需求分析(三)

1. 需求分析 从业务的需要出发&#xff0c;确定业务目的和目标&#xff0c;将业务需求转为产品需求 1.1 业务需求 业务需求 业务动机 业务目标 就是最根本的动机和目标成果&#xff0c;通过这个需求解决特定的问题 1.2 产品需求 产品需求 解决方案 产品结构 产品流程…

CI/CD 管道中的自动化测试:类型和阶段

在上一篇文章中&#xff0c;我们讨论了敏捷团队自动化测试用例的各种用例。其中一种情况是&#xff0c;团队希望将测试与每个构建集成&#xff0c;并将持续集成作为构建过程的一部分。 在本文中&#xff0c;我们将讨论持续集成/持续交付平台中的集成测试。 让我们先从基础知识…

Spring Cloud | 服务 “注册与发现“ 框架 : Eureka框架

目录&#xff1a; Eureka 的 "工作机制" :一、Eureka 的 "工作原理" ( 两大组件 ) :1.1 Eureka Server ( 服务注册中心 )1.2 Eureka Client ( 服务/服务实例&#xff0c;其存在 "两种角色" : ①服务提供者 ②服务消费者 ) :Eureka Client 的 含义…

【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串

【LeetCode刷题】Day 7 题目1&#xff1a;209.长度最小的子数组思路分析&#xff1a;思路1&#xff1a;暴力枚举 O(N^2^)思路2&#xff1a;滑动窗口 O(N) 题目2&#xff1a;3. 无重复字符的最长子串题目分析&#xff1a;思想1&#xff1a;暴力枚举哈希表O(N^2^)思想2&#xff1…

时间(空间)复杂度(结构篇)

目录 前言&#xff1a; 一、时间复杂度 1.1 时间复杂度的定义 1.2 时间复杂度的分析 表示方法&#xff1a; 1.3 常见的时间复杂度 1.4 时间复杂度的计算以及简单的分析 冒泡排序 折半查找&#xff08;二分查找&#xff09; 斐波那契数列&#xff08;递归&#xff09…

Android卡顿丢帧低内存与adb shell内存状态

Android卡顿丢帧低内存与adb shell内存状态 卡顿丢帧除了CPU/GPU层面&#xff0c;另外&#xff0c;也需要特别注意整机低内存情况。kswapd0 是一个内核工作线程&#xff0c;内存不足时会被唤醒&#xff0c;做内存回收工作。 当内存频繁在低水位的时候&#xff0c;kswapd0 会被频…

人类最友好语言? YAML 深入解析:从语法到最佳实践

什么是YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法&#xff0c;以易于阅读和编写的方式表示数据结构。 YAML广泛应用于配置文…

C语言题目-添加逗号(详解)

前言 今天来看看如何使用C语言对一串数字添加逗号吧&#xff0c;在我们电子账户上的余额都是每3位数有一个逗号吧&#xff0c;今天让我们来使用C语言实现这个功能。 题目描述 对于一个较大的整数 N(1<N<2,000,000,000) 比如 980364535&#xff0c;我们常常需要一位一位数…

8、Qt—Log4Qt使用小记2(每日产生文件)

前言&#xff1a; 开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 例如&#xff1a;上一篇文章中笔者记录了Log4qt的编译及配置使用&#xff0c;这篇文章重点写下每天产生文件到指定文件夹中&#xff0c;…

软考高级架构师:数据库案例篇 - ER 图和数据流图

一、讲解 从数据流图&#xff08;DFD&#xff09;转换为实体关系图&#xff08;ER图&#xff09;是一个重要的步骤&#xff0c;可以帮助将系统的动态流程转换为静态的数据模型。以下是一些经验和步骤&#xff0c;帮助你完成这一过程&#xff1a; 1. 理解数据流图 识别进程&a…