目录
一、项目背景
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
一、项目背景
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来查看)