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

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

目录


一、背景介绍


二、封装数据库访问函数

(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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/571564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存