Python封装函数实现MySQL数据库增删改和数据存储

目录

一、背景介绍

二、封装数据库访问函数

(1)封装数据库连接函数dbconnect

(2)封装SQL查询函数SQLQuery

(3)封装SQL命令函数SQLCommand

三、主函数调用

1.定义主函数main()    

(1)插入数据

(2)修改数据

(3)删除数据

(4)查询数据.

(5)输出数据

2.执行主函数

四、通过Pandas保存为CSV文件

五、图形显示查询结果

六、程序代码

七、运行结果


一、背景介绍

       在项目开发中,经常要对常用的功能进行封装,本示例介绍python函数的封装过程,实现对数据库表的增、删、改、查等功能;通过Pandas的dataframe组件实现查询结果保存为CSV文件,以方便后期数据分析使用;借助图形化方法,图形显示查询的结果。mySQL数据库studb结构:

       请参照:Python查询MySQL数据库_强heaven的博客-CSDN博客

二、封装数据库访问函数

(1)封装数据库连接函数dbconnect

Python数据库连接函数使用pymysql.connect方法实现。如下实例:

#数据库连接
def dbConnect():
    db = pymysql.connect(host='localhost',
                     user='root',
                     password='1234abcd!',
                     database='studb',
                     charset='utf8mb4',#mysql字符格式
                     cursorclass=pymysql.cursors.DictCursor)
    return db;

做如下封装:

#定义数据库连接函数
def dbConnect(hostname,username,password,database):
    db = pymysql.connect(host=hostname,user=username,
                         password=password,database=database,
                         charset='utf8mb4',#mysql字符格式
                         cursorclass=pymysql.cursors.DictCursor)
    return db;

(2)封装SQL查询函数SQLQuery

#定义SQL查询函数
def SQLQuery(db,strsql):
    try:
        cursor = db.cursor();
        cursor.execute(strsql);        
        results = cursor.fetchall();       
        return results;
    
    except pymysql.Error as err:
        print(err)
    
    finally:
        cursor.close()
        db.close()    

(3)封装SQL命令函数SQLCommand

#定义SQL命令函数(create、insert、delete、update)
def SQLCommand(db,strsql):
    try:
        cursor = db.cursor();
        cursor.execute(strsql);        
        #事务提交
        db.commit()     
        return True;
    
    except pymysql.Error as err:
        print(err)
    
    finally:
        cursor.close()
        db.close() 

三、主函数调用

1.定义主函数main()    

def main():

    hostname='127.0.0.1';#mySQL服务器地址
    username='zcq';
    password='1234abcd!';
    database='studb';

(1)插入数据

#1.插入数据
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """insert into studb.t_student(T_Student_No,T_Student_Name,T_Student_Age,T_Student_Dep)
             values('96055149','朱莉18',18,'科技大学')"""
    ifok = SQLCommand(db,strsql);
    if ifok:
        print("插入成功!\n") 

(2)修改数据

#2.构造更新语句
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """update studb.t_student set T_Student_Age=21 
          where T_Student_Name='张三3'"""
    ifok = SQLCommand(db,strsql);
    if ifok:
        print("修改成功!\n")

(3)删除数据

    #3.删除数据
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """delete from studb.t_student where T_Student_Name like'朱莉%'"""
    ifok = SQLCommand(db,strsql);
    if ifok:
        print("删除成功!\n")

(4)查询数据.

    #4.构造查询语句
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """SELECT T_Student_No,T_Student_Name,T_Student_Age,T_Student_Dep 
           FROM studb.t_student where T_Student_Age>=18 and T_Student_Age<=21"""    
    results = SQLQuery(db,strsql);

(5)输出数据

    #5.输出显示
    inum=0
    print("学号,姓名,年龄,专业")
    for row in results:
        stu_No = row['T_Student_No']
        stu_Name = row['T_Student_Name']
        stu_Age = row['T_Student_Age']
        stu_Dep = row['T_Student_Dep']
        inum += 1
        print("%s,%s,%s,%s"\
              %(stu_No,stu_Name,stu_Age,stu_Dep))
    print("\n代码执行完毕...查询到%d条符合条件记录。" %(inum))

2.执行主函数

main()  

四、通过Pandas保存为CSV文件

    #6.与Pandas对接,保存为CSV文件
    df  = pd.DataFrame(results);
    df.to_csv('stu_query.csv',index=False)
    print(df);
  T_Student_Age T_Student_Dep T_Student_Name T_Student_No
0            18           发电1            张三1      1122101
1            19           发电2            张三2      1122102
2            21           发电3            张三3      1122103
3            18           发电4            张三4      1122104
4            19           发电5            张三5      1122105
5            20           发电6            张三6      1122106
6            18           发电7            张三7      1122107
7            19           发电8            张三8      1122108
8            20           发电9            张三9      1122109
9            20           科信部            朱四1     96055160

五、图形显示查询结果

    #7.图形显示
    test_A1   = df['T_Student_Age']

    plt.figure()
    # 设置matplotlib正常显示中文和负号
    plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
    plt.rcParams['axes.unicode_minus']=False     # 正常显示负号
    plt.plot(list(range(len(test_A1))), test_A1, color='r')
    plt.xlabel('满足条件的记录', fontsize=14)
    plt.ylabel('年龄', fontsize=14)
    plt.title('年龄分布曲线', fontsize=10)
    plt.show()

六、程序代码

# -*- coding: utf-8 -*-
"""
Created on Sun Apr  3 14:39:15 2022

@author: zhuchunqiang
"""
import pandas as pd
import matplotlib.pyplot as plt
import pymysql


'''
#数据库连接
def dbConnect():
    db = pymysql.connect(host='localhost',
                     user='root',
                     password='1234abcd!',
                     database='studb',
                     charset='utf8mb4',#mysql字符格式
                     cursorclass=pymysql.cursors.DictCursor)
    return db;
'''

#定义数据库连接函数
def dbConnect(hostname,username,password,database):
    db = pymysql.connect(host=hostname,user=username,
                         password=password,database=database,
                         charset='utf8mb4',#mysql字符格式
                         cursorclass=pymysql.cursors.DictCursor)
    return db;

#定义SQL查询函数
def SQLQuery(db,strsql):
    try:
        cursor = db.cursor();
        cursor.execute(strsql);        
        results = cursor.fetchall();       
        return results;
    
    except pymysql.Error as err:
        print(err)
    
    finally:
        cursor.close()
        db.close()        
 
#定义SQL命令函数(create、insert、delete、update)
def SQLCommand(db,strsql):
    try:
        cursor = db.cursor();
        cursor.execute(strsql);        
        #事务提交
        db.commit()     
        return True;
    
    except pymysql.Error as err:
        print(err)
    
    finally:
        cursor.close()
        db.close()        
    
#定义主函数    
def main():

    hostname='127.0.0.1';#mySQL服务器地址
    username='zcq';
    password='1234abcd!';
    database='studb';
    
    #1.插入数据
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """insert into studb.t_student(T_Student_No,T_Student_Name,T_Student_Age,T_Student_Dep)
             values('96055149','朱莉18',18,'科技大学')"""
    ifok = SQLCommand(db,strsql);
    if ifok:
        print("插入成功!\n")    
        
    #2.构造更新语句
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """update studb.t_student set T_Student_Age=21 
          where T_Student_Name='张三3'"""
    ifok = SQLCommand(db,strsql);
    if ifok:
        print("修改成功!\n")

    #3.删除数据
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """delete from studb.t_student where T_Student_Name like'朱莉%'"""
    ifok = SQLCommand(db,strsql);
    if ifok:
        print("删除成功!\n")

    #4.构造查询语句
    db = dbConnect(hostname,username,password,database);#连接数据库
    strsql = """SELECT T_Student_No,T_Student_Name,T_Student_Age,T_Student_Dep 
           FROM studb.t_student where T_Student_Age>=18 and T_Student_Age<=21"""    
    results = SQLQuery(db,strsql);
    
    #5.输出显示
    inum=0
    print("学号,姓名,年龄,专业")
    for row in results:
        stu_No = row['T_Student_No']
        stu_Name = row['T_Student_Name']
        stu_Age = row['T_Student_Age']
        stu_Dep = row['T_Student_Dep']
        inum += 1
        print("%s,%s,%s,%s"\
              %(stu_No,stu_Name,stu_Age,stu_Dep))
    print("\n代码执行完毕...查询到%d条符合条件记录。" %(inum))
    
    #6.与Pandas对接,保存为CSV文件
    df  = pd.DataFrame(results);
    df.to_csv('stu_query.csv',index=False)
    print(df);
    
    #7.图形显示
    test_A1   = df['T_Student_Age']

    plt.figure()
    # 设置matplotlib正常显示中文和负号
    plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
    plt.rcParams['axes.unicode_minus']=False     # 正常显示负号
    plt.plot(list(range(len(test_A1))), test_A1, color='r')
    plt.xlabel('满足条件的记录', fontsize=14)
    plt.ylabel('年龄', fontsize=14)
    plt.title('年龄分布曲线', fontsize=10)
    plt.show()

main()  
    

七、运行结果

runfile('E:/PythonStudy/test/query_def.py', wdir='E:/PythonStudy/test')
插入成功!

修改成功!

删除成功!

学号,姓名,年龄,专业
1122101,张三1,18,发电1
1122102,张三2,19,发电2
1122103,张三3,21,发电3
1122104,张三4,18,发电4
1122105,张三5,19,发电5
1122106,张三6,20,发电6
1122107,张三7,18,发电7
1122108,张三8,19,发电8
1122109,张三9,20,发电9
96055160,朱四1,20,科信部

代码执行完毕...查询到10条符合条件记录。
  T_Student_Age T_Student_Dep T_Student_Name T_Student_No
0            18           发电1            张三1      1122101
1            19           发电2            张三2      1122102
2            21           发电3            张三3      1122103
3            18           发电4            张三4      1122104
4            19           发电5            张三5      1122105
5            20           发电6            张三6      1122106
6            18           发电7            张三7      1122107
7            19           发电8            张三8      1122108
8            20           发电9            张三9      1122109
9            20           科信部            朱四1     96055160

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强heaven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值