0


python后端程序:Flask连接数据库mysql,实现基本SQL增删改查(包含全部代码,可以跑通)

一、项目背景

1.1 技术栈

python版本是,python3.10.11,其他的包用python对应的版本即可,框架:flask2.3.2 ,IDEA是pycharm,使用postman模拟前端,数据库:mysql

1.2 总结

只是一个快速上手flask和前后端交互性的一个小案例,优化空间非常大,如:代码的健壮性,可读性,格式的标准,代码不简洁等等,并且实现的不够灵活,很多地方都是写死的,并且对数据库的操作要小心,尤其是删除插入修改,一定要把所有场景考虑好,以免发生事故,此代码在真实运用场景并不提倡,ps:读者也可以学习下flask_resrless的使用

二、源码

在本地新建一个文件夹如:sql_platform,将2.1和2.2两个源码存成两个py文件,都放在sql_platform下面。

2.1 sever.py

"""
Author : rebeccayanhan
Time   : 2023/5/22 下午5:45
File   : server.py
"""

from flask import Flask, jsonify, request
from service_conf import *
import pymysql
import json

app = Flask(__name__)

def create_mysql_conn():
    # pymysql连接rebecca数据库
    conn = pymysql.connect(host=mysql_params['host'],
                           port=mysql_params['port'],
                           user=mysql_params['user'],
                           passwd=mysql_params['passwd'],
                           db=mysql_params['db'],
                           charset=mysql_params['charset'])

    return conn

@app.route("/")
def hi():
    return "Hi!"

@app.route("/select_data")
def select():
    conn = create_mysql_conn()
    # 创建一个游标
    cursor = conn.cursor()
    query_sql = "select * from student;"
    n = cursor.execute(query_sql)
    ls = ['Sno', 'Sname', 'Sex', 'Sage', 'Sdept']
    result_dic = {'count': n, 'table_name': 'student'}
    ls_2 = []
    for row in cursor:
        temp = {}
        for i in range(len(row)):
            temp[ls[i]] = row[i]
        ls_2.append(temp)
    result_dic['info'] = ls_2
    cursor.close()
    return json.dumps(result_dic)

@app.route("/insert_data", methods=["POST"])
def insert():
    conn = create_mysql_conn()
    # 创建一个游标
    cursor = conn.cursor()
    # 这个info_list = request.form.get("info")通过url
    # 下面这个通过body
    info_list = request.json.get("info")
    for info in info_list:
        sno = info['Sno']
        sname = info['Sname']
        sex = info['Sex']
        sage = info['Sage']
        sdept = info['Sdept']
        query_sql = "insert into student(Sno, Sname, Sex, Sage, Sdept) values({}, {}, {}, {}, {});".format(sno,
                                                                                                           repr(sname),
                                                                                                           repr(sex),
                                                                                                           sage,
                                                                                                           repr(sdept))
        cursor.execute(query_sql)
    cursor.close()
    conn.commit()

    ret_message = {"code": 0, "status": "successful"}
    return ret_message

@app.route("/update_data", methods=['PATCH'])
def update():
    conn = create_mysql_conn()
    cursor = conn.cursor()
    info_list = request.json.get("info")
    for info in info_list:
        sname = info['Sname']
        if sname == '李勇':
            query_sql = "update student set sage=90 where sname='{}';".format(sname)
            print(query_sql)
            cursor.execute(query_sql)
    # 修改后需要commit
    cursor.close()
    conn.commit()
    ret_message = {"code": 0, "status": "successful"}
    return ret_message

@app.route("/delete_data", methods=['DELETE'])
def delete():
    conn = create_mysql_conn()
    cursor = conn.cursor()
    info_list = request.json.get("info")
    for info in info_list:
        sno = info['Sno']
        query_sql = "delete from student where Sno={};".format(sno)
        cursor.execute(query_sql)
    # 删除后需要commit
    cursor.close()
    conn.commit()
    ret_message = {"code": 0, "status": "successful"}
    return ret_message

if __name__ == "__main__":
    app.run()

2.2 server_conf.py

"""
Author : rebeccayanhan
Time   : 2023/5/22 下午5:45
File   : server_conf.py
"""

# 读写参数
mysql_params = {
    'host': '127.0.01', 
    'user': 'root',          #数据库用户名
    'passwd': '********',    #用户密码
    'db': 'rebecca',         #数据库的名字
    'port': 3306,            #端口号
    'charset': 'utf8'        #编码方式
}

三、运行演示(图文教程)

3.1 数据准备

先创建一个database,这里我使用的是自己创建的rebecca

再往数据库里面先存入几条数据,如下表所示。

查看数据库的端口号

show global variables like 'port';

3.2 启动服务

启动server.py文件

启动成功,如下图所示, 点击http://127.0.0.1:5000/

出现,服务运行成功

3.3 测试get : select_data

对应代码为select函数(def select():那行开始)

选择GET,URL输入

http://127.0.0.1:5000/select_data

选择json结构

3.4 测试PATCH: update_data

对应代码为updata函数(def update():那行开始)

通过这个函数我希望把李勇的年龄改为90,现在的数据是,李勇的年龄是20

select * from student where sname='李勇';

输入 http://127.0.0.1:5000/update_date,和body

{
    "info": [
        {
            "Sno": 201215121,
            "Sname": "李勇",
            "Sex": "男",
            "Sage": 20,
            "Sdept": "CS"
        }
    ]
}

点击send,如下图,显示已经成功

再次查看数据,已经修改成功

3.5 测试DELETE : delete_data

对应代码为delete函数(def delete():那行开始)

代码实现是通过学号sno来删除,将学号等于201215123的人删除,

postman进行如下输入和选择

{
    "info": [
        {
            "Sno": 201215123,
            "Sname": "李勇",
            "Sex": "男",
            "Sage": 20,
            "Sdept": "CS"
        }
    ]
}

输入http://127.0.0.1:5000/delete_data,点击send,如下图,显示已经成功

删除结果

3.6 测试POST : insert_data

对应代码为insert函数(def insert():那行开始)

插入一个全新数据,postman进行如下输入和选择

{
    "info": [
        {
            "Sno": 112873981211,
            "Sname": "rebecca",
            "Sex": "女",
            "Sage": 18,
            "Sdept": "CS"
        }
    ]
}

输入http://127.0.0.1:5000/insert_data ,点击send,如下图,显示已经成功

查看数据库是否插入成功,如图所示已经成功。(也可以通过get来查看)

标签: 数据库 flask mysql

本文转载自: https://blog.csdn.net/weixin_45440484/article/details/130854529
版权归原作者 Rebecca.Yan 所有, 如有侵权,请联系我们删除。

“python后端程序:Flask连接数据库mysql,实现基本SQL增删改查(包含全部代码,可以跑通)”的评论:

还没有评论