掌握Python 操作 MySQL 数据库(用python操作数据库)
off999 2024-10-12 06:14 53 浏览 0 评论
本文Python 操作 MySQL 数据库需要是使用到 PyMySQL 驱动
- PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb。
 - PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
 
Python 操作 MySQL 前提是要安装好 MySQL 数据库并能正常连接使用,安装步骤详见下文。
操作流程
- 安装 MySQL 数据库
 - pymysql 模块安装与使用
 - 获取数据库的连接
 - 执行 sql 语句或存储过程
 - 关闭数据库连接
 
安装 MySQL 数据库
注意: 安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足导致无法安装。
一、Linux 上安装 MySQL
1、检测系统是否自带安装 MySQL:
  rpm -qa | grep mysql2、如果查看到系统有安装 MySQL,那可以选择进行卸载:
rpm -e mysql…  # 普通删除模式
rpm -e --nodeps mysql…  # 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除3、安装 MySQL
首先需要先下载 MySQL 安装包,官网下载地址 下载对应版本即可,或直接在网上拉取并安装:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm # 获取安装包
rpm -ivh mysql-community-release-el7-5.noarch.rpm                    # 安装
yum update
yum install mysql-server  权限设置:
chown mysql:mysql -R /var/lib/mysql初始化 MySQL:
mysqld --initialize启动 MySQL:
systemctl start mysqld查看 MySQL 运行状态:
systemctl status mysqld4、修改默认密码
Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码:
mysqladmin -u root password "new_password";登陆:
mysql -uroot -p'new_password'三、创建数据库
创建数据库:
create database test_db;查看数据库:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.00 sec)
mysql> use test_db;
Database changedpymysql 模块安装与数据 CURD
一、安装
PyMySQL 模块使用 pip命令进行安装:
pip3 install PyMySQL假如系统不支持 pip 命令,可以使用以下方式安装:
$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install二、pymysql 连接数据库
pymysql .connect 函数:连接上数据库
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
print(conn)
print(type(conn))输出结果显示如下:表面数据库连接成功
<pymysql.connections.Connection object at 0x00000000022A54A8>
<class 'pymysql.connections.Connection'>使用 pymysql 的 connect() 方法连接数据库,connect 参数解释如下:
- host:MySQL服务的地址,若数据库在本地上,使用 localhost 或者127.0.0.1。如果在其它的服务器上,则写对应的 IP地址
 - port:服务的端口号,默认为3306,不写则为默认值。
 - user:登录数据库的用户名
 - passwd:登录 MySQL 的密码
 - db:数据库名
 - charset:设置为 utf8 编码,解决存汉字乱码问题
 
conn.cursor():获取游标
如果要操作数据库,光连接数据是不够的,咱们必须拿到操作数据库的游标,才能进行后续的操作,游标的主要作用是用来接收数据库操作后的返回结果,比如读取数据、添加数据。通过获取到的数据库连接实例 conn 下的 cursor() 方法来创建游标,实例如下:
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
print(cursor_test)输出结果为:
<pymysql.cursors.Cursor object at 0x000000000A544B00>cursor 返回一个游标实例对象,其中包含了很多操作数据的方法,如执行sql语句,sql 执行命令:execute()和executemany()
execute(query,args=None):
- 函数作用:执行单条的sql语句,执行成功后返回受影响的行数
 - 参数说明:query:要执行的sql语句,字符串类型args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符
 
executemany(query,args=None):
- 函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数
 - 参数说明:query:要执行的sql语句,字符串类型args:嵌套的序列或映射,用于query的参数值
 
其他游标对象如下表:
名称  | 描述  | 
close()  | 关闭游标,之后游标不可用  | 
fetchone()  | 返回一条查询结果  | 
fetchall()  | 返回所有查询结果  | 
fetchmany([size])  | 返回size条查询结果  | 
nextset()  | 移动到下一条结果  | 
scroll(value,mode=’relative’)  | 移动游标到指定行,如果mode=’relative’,则表示从当前行移动value条,如果mode=‘absolute’,则表示从结果集的第一行移动value条  | 
完整数据库连接操作实例如下:
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
print(cursor_test)
# 使用 execute()  方法执行 SQL 查询,查询数据库版本
cursor_test.execute("SELECT VERSION()")
# 使用 fetchone() 方法返回一条数据.
data = cursor_test.fetchone()
print("Database version : %s " % data)
# 关闭数据库连接
conn.close()以上结果输出为:
Database version : 5.7.28 三、创建表
创建表代码如下:
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor_test.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE user1 (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""
cursor_test.execute(sql)
# 关闭数据库连接
conn.close()如下所示数据库表创建成功:
mysql> desc user1;
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| FIRST_NAME | char(20) | NO   |     | NULL    |       |
| LAST_NAME  | char(20) | YES  |     | NULL    |       |
| AGE        | int(11)  | YES  |     | NULL    |       |
| SEX        | char(1)  | YES  |     | NULL    |       |
| INCOME     | float    | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)三、插入数据
插入数据实现代码:
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
# 使用预处理语句创建表
sql = """INSERT INTO user1(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Fei', 'Fei', 20, 'M', 1000)"""
try:
   # 执行sql语句
   cursor_test.execute(sql)
   # 提交到数据库执行
   conn.commit()
except:
   # 如果发生错误则回滚
   conn.rollback()
# 关闭数据库连接
conn.close()插入数据结果:
mysql> select * from user1;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE  | SEX  | INCOME |
+------------+-----------+------+------+--------+
| Fei        | Fei       |   20 | M    |   1000 |
+------------+-----------+------+------+--------+
1 row in set (0.00 sec)四、查询数据
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
- fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
 - fetchall(): 接收全部的返回结果行.
 - rowcount: 这是一个只读属性,并返回执行 execute()方法后影响的行数。
 
查询数据代码如下:
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
sql = """
    select * from user1"""
try:
    # 执行 sql 语句
    cursor_test.execute(sql)
    # 显示出所有数据
    data_result = cursor_test.fetchall()
    for row in data_result:
        fname = row[0]
        lname = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        # 打印结果
        print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
              (fname, lname, age, sex, income))
except:
    print("Error: unable to fetch data")
# 关闭数据库连接
conn.close()输出结果:
fname=Fei,lname=Fei,age=20,sex=M,income=1000.0五、数据库表更新操作
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
sql = "UPDATE user1 SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
    # 执行SQL语句
    cursor_test.execute(sql)
    # 提交到数据库执行
    conn.commit()
except:
    # 发生错误时回滚
    conn.rollback()
# 关闭数据库连接
conn.close()六、删除操作
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
sql = "DELETE * FROM user1"
try:
    # 执行SQL语句
    cursor_test.execute(sql)
    # 提交到数据库执行
    conn.commit()
except:
    # 发生错误时回滚
    conn.rollback()
# 关闭数据库连接
conn.close()七、错误处理
DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:
异 常  | 描 述  | 
Warning  | 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。  | 
Error  | 警告以外所有其他错误类。必须是 StandardError 的子类。  | 
InterfaceError  | 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。  | 
DatabaseError  | 和数据库有关的错误发生时触发。 必须是Error的子类。  | 
DataError  | 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。  | 
OperationalError  | 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。  | 
IntegrityError  | 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。  | 
InternalError  | 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。  | 
ProgrammingError  | 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。  | 
NotSupportedError  | 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。  | 
总结
本文给大家介绍 Python 如何连接 Mysql 进行数据的增删改查操作,文章通过简洁的代码方式进行示例演示,给使用 Python 操作 Mysql 的工程师提供支撑。
相关推荐
- 阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?
 - 
        
TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...
 
- 高流量大并发Linux TCP性能调优_linux 高并发网络编程
 - 
        
其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...
 
- 性能测试100集(12)性能指标资源使用率
 - 
        
在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...
 
- Linux 服务器常见的性能调优_linux高性能服务端编程
 - 
        
一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...
 
- Nginx性能优化实战:手把手教你提升10倍性能!
 - 
        
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...
 
- 高并发场景下,Spring Cloud Gateway如何抗住百万QPS?
 - 
        
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...
 
- Kubernetes 高并发处理实战(可落地案例 + 源码)
 - 
        
目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...
 
- 高并发场景下,Nginx如何扛住千万级请求?
 - 
        
Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...
 
- Spring Boot+Vue全栈开发实战,中文版高清PDF资源
 - 
        
SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...
 
- Docker-基础操作_docker基础实战教程二
 - 
        
一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...
 
- 你有空吗?跟我一起搭个服务器好不好?
 - 
        
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...
 
- 部署你自己的 SaaS_saas如何部署
 - 
        
部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...
 
- Docker Compose_dockercompose安装
 - 
        
DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...
 
- 京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统
 - 
        
前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...
 
- Kubernetes (k8s) 入门学习指南_k8s kubeproxy
 - 
        
Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...
 
欢迎 你 发表评论:
- 一周热门
 - 
                    
- 
                            
                                                                
抖音上好看的小姐姐,Python给你都下载了
 - 
                            
                                                                
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
 - 
                            
                                                                
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
 - 
                            
                                                                
python入门到脱坑 输入与输出—str()函数
 - 
                            
                                                                
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
 - 
                            
                                                                
Python三目运算基础与进阶_python三目运算符判断三个变量
 - 
                            
                                                                
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
 - 
                            
                                                                
慕ke 前端工程师2024「完整」
 - 
                            
                                                                
失业程序员复习python笔记——条件与循环
 - 
                            
                                                                
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
 
 - 
                            
                                                                
 
- 最近发表
 
- 标签列表
 - 
- python计时 (73)
 - python安装路径 (56)
 - python类型转换 (93)
 - python进度条 (67)
 - python吧 (67)
 - python的for循环 (65)
 - python格式化字符串 (61)
 - python静态方法 (57)
 - python列表切片 (59)
 - python面向对象编程 (60)
 - python 代码加密 (65)
 - python串口编程 (77)
 - python封装 (57)
 - python写入txt (66)
 - python读取文件夹下所有文件 (59)
 - python操作mysql数据库 (66)
 - python获取列表的长度 (64)
 - python接口 (63)
 - python调用函数 (57)
 - python多态 (60)
 - python匿名函数 (59)
 - python打印九九乘法表 (65)
 - python赋值 (62)
 - python异常 (69)
 - python元祖 (57)
 
 
