pymysql操作总结

配置项链接数据库

pip install pymysql
安装pymysql
创建一个py文件,在里面进行编写

创建表

#导包
import pymysql
#连接数据库
con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库密码",database="数据库名",charset="utf8")
c1 = con.cursor()	#调用
sql = """create table student(
sid int primary key auto_increment,
sname varchar(20) not null,
score float(3,1) default 0,
joindate date not null,
smid int,
foreign key(smid) references major(mid)
);"""
c1.execute(sql)

增加数据

# 对表中数据的操作会触发事务   insert update delete
# 提交事务 数据才会同步
import pymysql

con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库面膜",database="数据库名",charset="utf8")
c1 = con.cursor()

sql = """insert into student values
(1001,"张大民",95.5,"2018-03-12",30),
(1002,"刘德华",93,"2017-09-18",10),
(1003,"刘能",87,"2018-09-12",50),
(1004,"范冰冰",89,"2016-11-20",10),
(1005,"周润发",75,"2017-06-30",10),
(1006,"郭靖",99.9,"2018-03-22",20),
(1007,"周立波",65,"2018-09-12",30),
(1008,"詹姆斯",59,"2015-12-09",50);"""

try:
    c1.execute(sql)
    # 当游标对象执行完sql语句之后,需要让数据库对象将事务进行提交
    con.commit()
    print("插入数据成功")
except:
    # sql语句出现问题  事务进行回滚
    con.rollback()
    print("插入数据失败")

修改数据

import pymysql

con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库面膜",database="数据库名",charset="utf8")
c1 = con.cursor()

# 修改詹姆斯的成绩为66
# 修改表中数据  触发事务
sql = """update student set score=66 where name='詹姆斯';"""

try:
    # try里面存放可能会出现问题的代码
    # 游标对象执行sql语句
    c1.execute(sql)
    # 数据库对象提交事务
    con.commit()
    print("修改成功")
except:
    # 只要try中存放的代码有错误就会执行except里的代码
    # sql语句出现问题 报错  让事务进行回滚
    con.rollback()
    print("修改失败")

删除数据

import pymysql

con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库密码",database="数据库名",charset="utf8")
c1 = con.cursor()

# 删除成绩低于80分的学生的信息
# 删除表中的数据  会触发事务
sql = """delete from student where score<80"""

try:
    # 游标对象执行sql语句
    c1.execute(sql)
    # 让数据库对象提交事务
    con.commit()
    print("删除成功")
except:
    # 如果sql发生错误 让事务进行回滚
    con.rollback()
    print("删除失败")

查询数据

# pymysql从表中查询数据,一定是有数据被返回
# 需要接收返回的数据
import pymysql

con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库密码",database="数据库名",charset="utf8")
c1 = con.cursor()

sql = """select sname,score from student"""

ret = c1.execute(sql)
# 直接返回执行后的结果 得到数据的条数
print(ret)

# 获取具体的数据  从游标对象获取
# fetchone() 获取1条数据
# print(c1.fetchone())
for i in range(ret):
    print(c1.fetchone())

# fetchmany(num)获取指定条数的数据
# 如果指定num 获取num条数据
# 如果不指定  获取1条数据
print(c1.fetchmany())

# fetchall() 获取所有返回的数据
print(c1.fetchall())

pymysql的封装

封装的思路

# 目的:封装一个模块
# 功能:可以快捷的操作mysql中的功能
# 分析:
确定单独的方法---(想要实现的功能)
确定公共的内容---(连接数据库、创建游标对象)

# 更进一步
初始化
pymysql使用之前
# 1. 先连接mysql,获取连接对象(数据库对象)
# 2. 通过连接对象,获取游标对象

具体的方法中如何执行
# 1. 直接执行
# 2. 先执行,再提交 (对数据进行增删改操作的时候,不仅仅是游标对象执行sql语句,连接对象还得向上提交才行)

封装的操作

可以封装到创建的某个py文件中,只需要导入就可以调用
sql语句可以通过调用方法时传参获取

 # 创建表      #传参
    def create(self,sql):
        # 编写sql语句
        #sql = """create table person(
        #id int primary key auto_increment,
        #name varchar(20) not null,
        #gender enum("男","女","中性") default "男"
        #);"""
        # 让游标对象来执行sql语句
        self.c1.execute(sql)
        print("表创建成功")
# pymysql进行封装
# 创建表  插入数据  修改数据  删除数据  查询数据
import pymysql

class Mysql(object):
    # 在创建对象时会执行 优先实例方法执行
    def __init__(self):
        try:
            # 利用pymysql模块将python与mysql进行连接
            self.con = pymysql.connect(host="localhost", port=3306, user="root", password="数据库密码", database="数据库名",
                                  charset="utf8")
            print("数据库连接成功")
        except Exception as e:
            # 如果try里面的语句出现问题会执行except语句  打印错误信息
            print(e)
        else:
            # try执行完以后会执行else里面的语句
            # 数据库对象创建游标对象     cursor()
            self.c1 = self.con.cursor()
            print("游标对象创建成功")

    # 创建表
    def create(self):
        # 编写sql语句
        sql = """create table person(
        id int primary key auto_increment,
        name varchar(20) not null,
        gender enum("男","女","中性") default "男"
        );"""
        # 让游标对象来执行sql语句
        self.c1.execute(sql)
        print("表创建成功")

    # 插入数据
    def insert(self):
        sql = """insert into person values
        (1,"张三","男"),
        (2,"李四","女"),
        (3,"王五","中性")
        """
        ret = self.c1.execute(sql)
        # 如果sql语句执行成功  那么这里的ret肯定是有数据的
        if ret:
            # 让事务提交
            self.con.commit()
            print("插入数据成功")
        else:
            # 让事务回滚
            self.con.rollback()
            print("插入数据失败")

    # 修改数据
    def update(self):
        # 修改王五的性别为男
        sql = """update person set gender="男" where name='王五';"""
        ret = self.c1.execute(sql)
        if ret:
            # sql语句执行成功,提交事务
            self.con.commit()
            print("修改成功")
        else:
            # sql语句执行失败,事务回滚
            self.con.rollback()
            print("修改失败")

    # 删除数据
    def delete(self):
        # 王五
        sql = """delete from person where name='王五';"""
        ret = self.c1.execute(sql)
        if ret:
            # sql语句执行成功,事务提交
            self.con.commit()
            print("删除成功")
        else:
            # sql语句执行失败,事务回滚
            self.con.rollback()
            print("删除失败")

    # 查询数据
    def select(self):
        # 查询表中所有的数据
        sql = """select * from person"""
        ret = self.c1.execute(sql)
        # 统计数据的个数
        # print(ret)
        # 从游标对象获取所有的数据
        # fetchone()  获取一条数据
        # fetchmany(num)  获取指定num条数据,不指定num默认获取一条
        # fetchall()  获取所有数据  将所有的数据存放在元组里返回
        # print(self.c1.fetchall())
        # 获取所有的数据 要求控制台中打印一行一个数据
        for i in range(ret):
            print(self.c1.fetchone())

# 给类实例化对象
mysql = Mysql()
# mysql.create()
# mysql.insert()
# mysql.update()
# mysql.delete()
mysql.select()

另一种封装

import pymysql
class Db:
    def __init__(self) -> None:
        self.conn = pymysql.connect(host='localhost',port=3306,user='root',
        password='数据库密码',db='数据库名',cursorclass=pymysql.cursors.DictCursor)
        self.cursor = self.conn.cursor()
	# 获取单个数据
    def find(self,sql):
        self.cursor.execute(sql)
        res = self.cursor.fetchone()
        return res
	# 获取全部或者多条数据,以列表形式返回
    def find_all(self,sql):
        self.cursor.execute(sql)
        res = self.cursor.fetchall()
        return res
	# 修改 删除 添加数据
    def update(self,sql):
        self.cursor.execute(sql)
	# 提交
    def commit(self):
        self.conn.commit()

	# 回滚
    def rollback(self):
        self.conn.rollback()

db = Db()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值