0
点赞
收藏
分享

微信扫一扫

【数据库】pymysql基本操作

小飞侠熙熙 2022-02-22 阅读 90

数据库介绍

概念

一个存放数据的仓库(Database),这个仓库按照一定的数据结构组织、存放、管理数据。

分类

关系型数据库:mysql、sql server、oracle、DB2等
非关系型数据库:redis等

python操作数据库的方式

pymysql:纯python开发,支持python2和python3,简单易用

数据库基本操作

基本流程:

在这里插入图片描述
代码实现步骤

pymysql连接数据库

# 导包
import pymysql
#创建连接
conn = pymysql.connect(host="localhost",
                       port=3307,
                       user="root",
                       password="root",
                       database="books")
# 获取游标
cursor = conn.cursor()

# 执行sql
cursor.execute("select version()")
result = cursor.fetchall()
print(result)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

运行结果:
在这里插入图片描述

pymysql查询操作

此处运用数据库代码如下:

CREATE DATABASE if not EXISTS books DEFAULT CHARSET utf8;
use books;

Drop TABLE if EXISTS `t_book`;
CREATE TABLE `t_book`(
	`id` INT(11) not NULL auto_increment,
	`title` VARCHAR(20) NOT NULL COMMENT '图书名称',
	`put_date` date not null COMMENT '发布日期',
	`read` int(11) not null DEFAULT '0' COMMENT '阅读量',
	`comment` int(11) not null default '0' comment '评论量',
	`is_delete` TINYINT(1) not null DEFAULT '0' COMMENT '逻辑删除',
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='图书表';

INSERT into `t_book` VALUES('1','射雕英雄传','1980-05-01','12','34','0');
INSERT into `t_book` VALUES('2','天龙八部','1986-07-24','36','40','0');
INSERT into `t_book` VALUES('3','笑傲江湖','1995-12-24','20','80','0');

DROP TABLE if EXISTS `t_hero`;
CREATE TABLE `t_hero`(
	`id` int(11) not null auto_increment,
	`name` VARCHAR(20) not NULL COMMENT '姓名',
	`gender` SMALLINT(6) not null COMMENT'性别',
	`description` VARCHAR(200) DEFAULT NULL COMMENT '描述',
	`is_delete` TINYINT(1) not NULL DEFAULT '0' COMMENT '逻辑删除',
	`book_id` int(11) not null COMMENT '所属图书ID',
	PRIMARY KEY(`id`),
	key `t_hero_book_id`(`book_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='英雄人物表';

INSERT into `t_hero` VALUES('1','郭靖','1','降龙十八掌','0','1');
INSERT into `t_hero` VALUES('2','黄蓉','0','打狗棍法','0','1');
INSERT into `t_hero` VALUES('3','乔峰','1','降龙十八掌','0','2');
INSERT into `t_hero` VALUES('4','令狐冲','1','独孤九剑','0','3');
INSERT into `t_hero` VALUES('5','任盈盈','0','弹琴','0','3');


表如图:
在这里插入图片描述

查询操作:


"""
1.连接到数据库(host:localhost user:root password:root database:books)
2.查询图书表的数据(包括:图书id、图书名称、阅读量、评论量)
3.获取查询结果的总记录数
4.获取查询结果的第一条数据
5.获取全部的查询结果
"""
import  pymysql
# 创建连接
conn = pymysql.connect(host="localhost",
                       port=3307,
                       user="root",
                       password="root",
                       database="books"
                       )
# 获取游标
cursor = conn.cursor()
# 执行sql
# 2.查询图书表的数据
sql = "select id, title, `read`, `comment` from t_book;"
cursor.execute(sql)
# 3.获取查询结果的总记录数
print("获取的查询结果记录行数为:", cursor.rowcount)
# # 4.获取查询结果的第一条数据
# print(cursor.fetchone())
# 5.获取全部查询结果
print(cursor.fetchall())
#  关闭游标
cursor.close()
# 关闭连接

运行结果:
在这里插入图片描述
上面代码注释掉了4.获取查询结果的第一条数据
当不注释此条语句时运行结果如图:
在这里插入图片描述
为什么会发生这种情况?
因为游标。

游标是SQL的一种数据访问机制,游标是一种处理数据的方法。
使用SQL的select查询操作返回的结果是一个包含一行或者是多行的数据集。如果我们要对查询的结果再进行查询,比如(查看结果的第一行、下一行、最后一行、前十行等等操作)简单的通过select语句无法实现,因为此时索要查询的结果不是数据表,而是已经查询出来的结果集。
游标就是针对这种情况而出现的
我们可以将”游标“简单的看成是结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览我们需要的数据。

怎样解决这个问题?
重置游标位置。

"""
1.连接到数据库(host:localhost user:root password:root database:books)
2.查询图书表的数据(包括:图书id、图书名称、阅读量、评论量)
3.获取查询结果的总记录数
4.获取查询结果的第一条数据
5.获取全部的查询结果
"""
import  pymysql
# 创建连接
conn = pymysql.connect(host="localhost",
                       port=3307,
                       user="root",
                       password="root",
                       database="books"
                       )
# 获取游标
cursor = conn.cursor()
# 执行sql
# 2.查询图书表的数据
sql = "select id, title, `read`, `comment` from t_book;"
cursor.execute(sql)
# 3.获取查询结果的总记录数
print("获取的查询结果记录行数为:", cursor.rowcount)
# 4.获取查询结果的第一条数据
print(cursor.fetchone())
# 5.获取全部查询结果
# 重置游标位置
cursor.rownumber = 0
print(cursor.fetchall())
#  关闭游标
cursor.close()
# 关闭连接
conn.close()

先用print(cursor.rownumber)查看游标位置
然后重置位置cursor.rownumber = 0
运行结果为:
在这里插入图片描述

pymysql插入操作

import  pymysql
# 创建连接
conn = pymysql.connect(host="localhost",
                       port=3307,
                       user="root",
                       password="root",
                       database="books",
                       autocommit=True
                       )
# 获取游标
cursor = conn.cursor()
# 执行sql
# 2.新增一条图书数据
sql = "INSERT into t_book(id, title, put_date) VALUES(4, '西游记', '1986-01-01');"
cursor.execute(sql)
# 3.获取受影响的结果记录数
print("获取受影响的结果记录数为:", cursor.rowcount)

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

运行结果:
在这里插入图片描述
返回数据库查看:
在这里插入图片描述

pymysql更新操作

# 导包
import pymysql
# 创建连接
conn = pymysql.connect(host="localhost",
                       port=3307,
                       user="root",
                       password="root",
                       database="books",
                       autocommit=True)
# 获取游标
cursor = conn.cursor()

# 执行sql
sql = "UPDATE t_book set title='东游记' WHERE title='西游记';"
cursor.execute(sql)
print(cursor.rowcount)

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

运行结果:
在这里插入图片描述
返回数据库查看:
在这里插入图片描述

pymysql删除操作

# 导包
import pymysql
# 创建连接
conn = pymysql.connect(host="localhost",
                       port=3307,
                       user="root",
                       password="root",
                       database="books",
                       autocommit=True)
# 获取游标
cursor = conn.cursor()

# 执行sql
sql = "DELETE from t_book where title ='东游记';"
cursor.execute(sql)
print(cursor.rowcount)

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

运行结果:
在这里插入图片描述
返回数据库查看
在这里插入图片描述

查询操作与非查询操作的异同点

  • 相同点:基本操作流程都一样(创建连接,获取游标,执行sql,关闭游标,关闭连接)

  • 不同点
    要执行sql语句不一样
    非查询操作需要开启事务(在创建连接时,指定参数autocommit=True)

举报

相关推荐

0 条评论