当前位置: 首页 > news >正文

[Python进阶] Python操作MySQL数据库:pymysql

7.7 操作MySQL数据库:pymysql

7.7.1 准备工作(创建mysql数据库)

PHPStudy介绍:
phpstudy是一款非常有用的PHP开发工具,旨在帮助开发者更加便捷地进行PHP程序的开发与调试。它提供了一个友好的图形用户界面,使得用户能够方便地进行配置和管理本地的PHP开发环境。
phpstudy还提供了一些实用的功能和工具,帮助开发者更加高效地编写和调试PHP程序。它包含了代码编辑器,用户可以方便地编写和编辑PHP代码。并且,phpstudy还内置了调试工具,可以帮助开发者定位和解决程序中的Bug。此外,phpstudy还提供了数据库管理工具,使得开发者能够方便地管理和操作MySQL数据库。
总之,phpstudy是一款非常有用的PHP开发工具。它提供了快速搭建开发环境的能力,并且提供了许多实用的功能和工具,帮助开发者更加高效地编写和调试PHP程序。
Navicat Premium介绍:
Navicat Premium是一款数据库管理工具,它提供了方便快捷的数据库管理和开发功能,支持多种数据库类型,包括MySQL、PostgreSQL、Oracle等等。
Navicat Premium具有直观的图形用户界面和强大的功能,可以帮助用户轻松地创建、编辑和管理数据库,同时提供了数据导入、导出、同步和备份功能,使得数据的处理更加高效和灵活。
此外,Navicat Premium还支持多种语言,可以轻松适应不同地区和领域的需求。总的来说,Navicat Premium是一款功能强大、易用可靠的数据库管理工具。
下载安装并启动MySQL数据库:
1、进入PHPStudy官网:https://www.xp.cn/download.html
2、下载PHPStudy并安装
3、启动PHPStudy中首页,点击启动MySQL,如下图:
在这里插入图片描述

4、此时,PHPStudy已经自动创建了MySQL数据库,用户和密码可以在数据库页面查看。如下图:
在这里插入图片描述

5、下载并安装Navicat Premium(MySQL数据库可视化操作工具)
6、安装pymysql库:

pip install pymysql

7、通过Navicat Premium连接刚才创建的数据库,创造一些测试表和数据进去。

7.7.2 用Python操作MySQL数据库

7.7.2.1 连接数据库
import pymysqldb = pymysql.connect(host="localhost", user="root", password="root", database="mysql")  # 连接
cursor = db.cursor()  # 创建游标
cursor.execute("SELECT VERSION()")  # 执行查询
# 获取查询结果
print(f"Database version : {cursor.fetchone()[0]}")
db.close()  # 关闭连接
7.7.2.2 创建表
import pymysqldb = pymysql.connect(host="localhost", user="root", password="root", database="mysql")  # 连接
cursor = db.cursor()  # 创建游标
cursor.execute('DROP TABLE IF EXISTS employee')  # 使用execute()方法执行SQL,如果表存在则将其删除
# 使用预处理语句创建表
sql = """CREATE TABLE `employee` (`first_name` varchar(255) DEFAULT NULL COMMENT '姓',`last_name` varchar(255) DEFAULT NULL COMMENT '名',`age` int(11) DEFAULT NULL COMMENT '年龄',`sex` varchar(255) DEFAULT NULL COMMENT '性别',`income` varchar(255) DEFAULT NULL COMMENT '收入'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
cursor.execute(sql)  # 执行SQL语句
db.close()  # 关闭数据库连接
7.7.2.3 表_插入数据
import pymysqldb = pymysql.connect(host="localhost", user="root", password="root", database="mysql")  # 连接
cursor = db.cursor()  # 创建游标
sql = "INSERT INTO employee(first_name, last_name, age, sex, income) VALUES ('张', '三', 38, '女', 15000)"  # SQL语句:向数据表中插入数据
try:cursor.execute(sql)  # 执行SQL语句db.commit()  # 提交事务到数据库执行
except:db.rollback()  # 如果发生错误则执行回滚操作
db.close()  # 关闭数据库连接
7.7.2.4 表_查询数据
import pymysqldb = pymysql.connect(host="localhost", user="root", password="root", database="mysql")  # 连接
cursor = db.cursor()  # 创建游标
sql = "SELECT * FROM employee WHERE income > 1000 "  # SQL语句:查询
try:cursor.execute(sql)  # 执行SQL语句results = cursor.fetchall()  # 获取所有的记录列表for row in results:print(row)  # 打印列表元素first_name = row[0]  # 姓last_name = row[1]  # 名age = row[2]  # 年龄sex = row[3]  # 性别income = row[4]  # 收入print(first_name, last_name, age, sex, income)  # 打印列表元素
except:
print('无法获取到数据!')
db.close()  # 关闭数据库连接
7.7.2.5 表_修改数据
import pymysqldb = pymysql.connect(host="localhost", user="root", password="root", database="mysql")  # 连接
cursor = db.cursor()  # 创建游标
sql = 'UPDATE employee SET age = age + 5 WHERE sex = "女"'  # SQL语句,执行更新操作
try:cursor.execute(sql)  # 执行SQL语句db.commit()  # 提交到数据库执行
except:db.rollback()  # 发生错误时回滚
db.close()  # 关闭数据库连接
7.7.2.6 表_删除数据
import pymysqldb = pymysql.connect(host="localhost", user="root", password="root", database="mysql")  # 连接
cursor = db.cursor()  # 创建游标
sql = 'DELETE FROM employee WHERE income > 5000 AND age >35'  # SQL语句,执行删除操作
try:cursor.execute(sql)  # 执行SQL语句db.commit()  # 提交到数据库执行
except:db.rollback()  # 发生错误时回滚
db.close()  # 关闭数据库连接

7.7.3 问题及报错

报错1:使用Navicat连接数据库后发现看不到需要操作的数据库或者使用Python连接数据库的时候报错:Access denied for user ‘root’@‘%’ to database ‘netai_test’
原因:这是由于创建数据库后没有对用户授权,使用户可以访问数据库的原因。但是本地访问可以。
处理:打开Navicat,创建以root用户的连接,然后在要操作的数据库中新建查询,执行如下语句:grant all on (数据库名).* to ‘(用户)’@‘%’ identified by ‘(用户密码)’ with grant option;

http://www.lryc.cn/news/281437.html

相关文章:

  • Vue3实现带点击外部关闭对应弹出框(可共用一个变量)
  • 可视化试题(一)
  • RHCE 【在openEuler系统中搭建基本论坛(网站)】
  • 20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
  • 日志采集传输框架之 Flume,将监听端口数据发送至Kafka
  • 关于Vue前端接口对接的思考
  • 【设计模式之美】SOLID 原则之三:里式替换(LSP)跟多态有何区别?如何理解LSP中子类遵守父类的约定
  • 代码随想录第六十三天——被围绕的区域,太平洋大西洋水流问题,最大人工岛
  • Docker 项目如何使用 Dockerfile 构建镜像?
  • 实践学习PaddleScience飞桨科学工具包
  • Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式
  • 达梦数据库主备集群
  • Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决
  • 深入理解 go chan
  • java+vue基于Spring Boot的渔船出海及海货统计系统
  • Linux第25步_在虚拟机中备份“ST官方的TF-A源码”
  • 统计学-R语言-4.1
  • C++(1) —— 基础语法入门
  • 构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包
  • Vue-插槽(Slots)
  • 新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?
  • 安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现
  • spring cloud之集成sentinel
  • 让车辆做到“耳听八方”,毫米波雷达芯片与系统设计
  • Python如何实现数据驱动的接口自动化测试
  • 高级分布式系统-第15讲 分布式机器学习--联邦学习
  • 小程序基础学习(事件处理)
  • 网络协议与攻击模拟_01winshark工具简介
  • 【linux学习笔记】网络
  • JUC-线程中断机制和LockSupport