目录
一、项目背景
1.1 技术栈
1.2 总结
二、源码
2.1 sever.py
2.2 server_conf.py
三、运行演示(图文教程)
3.1 数据准备
3.2 启动服务
3.3 测试GET : select_data
3.4 测试PATCH: update_data
3.5 测试DELETE : delete_data
3.6 测试POST : insert_data
python版本是,python3.10.11,其他的包用python对应的版本即可,框架:flask2.3.2 ,IDEA是pycharm,使用postman模拟前端,数据库:mysql
只是一个快速上手flask和前后端交互性的一个小案例,优化空间非常大,如:代码的健壮性,可读性,格式的标准,代码不简洁等等,并且实现的不够灵活,很多地方都是写死的,并且对数据库的操作要小心,尤其是删除插入修改,一定要把所有场景考虑好,以免发生事故,此代码在真实运用场景并不提倡,ps:读者也可以学习下flask_resrless的使用
在本地新建一个文件夹如:sql_platform,将2.1和2.2两个源码存成两个py文件,都放在sql_platform下面。
""" 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()
""" 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' #编码方式 }
先创建一个database,这里我使用的是自己创建的rebecca
再往数据库里面先存入几条数据,如下表所示。
查看数据库的端口号
show global variables like 'port';
启动server.py文件
启动成功,如下图所示, 点击http://127.0.0.1:5000/
出现,服务运行成功
对应代码为select函数(def select():那行开始)
选择GET,URL输入
http://127.0.0.1:5000/select_data
选择json结构
对应代码为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,如下图,显示已经成功
再次查看数据,已经修改成功
对应代码为delete函数(def delete():那行开始)
代码实现是通过学号sno来删除,将学号等于201215123的人删除,
postman进行如下输入和选择
{ "info": [ { "Sno": 201215123, "Sname": "李勇", "Sex": "男", "Sage": 20, "Sdept": "CS" } ] }
输入http://127.0.0.1:5000/delete_data,点击send,如下图,显示已经成功
删除结果
对应代码为insert函数(def insert():那行开始)
插入一个全新数据,postman进行如下输入和选择
{ "info": [ { "Sno": 112873981211, "Sname": "rebecca", "Sex": "女", "Sage": 18, "Sdept": "CS" } ] }
输入http://127.0.0.1:5000/insert_data ,点击send,如下图,显示已经成功
查看数据库是否插入成功,如图所示已经成功。(也可以通过get来查看)
上一篇:Oracle 三种分页方法