# mysql-restful-api **Repository Path**: li-zhengyang2023/mysql-restful-api ## Basic Information - **Project Name**: mysql-restful-api - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-28 - **Last Updated**: 2024-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mysql-restful-api #### 介绍 **实现数据库的增删改查Restful接口** #### 软件架构 软件架构说明 包括Test1-ORM和Test2-Restful两部分 前者定义表格在python中的对象,并向指定数据库传输表格csv格式数据 后者实现了相应的Restful接口,只需要对特定地址发送请求,即可使用接口对数据库进行操作 #### 测试说明 1. 在主目录(可以看到src文件夹和.csv表格并立的目录)打开cmd 运行./insert.sh 2. 在主目录(可以看到src文件夹和.csv表格并立的目录)打开cmd 运行./start.sh 3. 使用postman或者 Apifox 传入数据测试 Restful 接口 #### 数据说明 **insert**: |方法|路径| |----|----| |`POST`|`/api/v1/`| 以表departments为例,示例json数据: ``` { "rows": [ {"dept_no": "d010", "dept_name": "Engineering"} {"dept_no": "d011", "dept_name": "Cooperating"} ] } ``` 其中插入行用rows表示,可以包含多行,实现方法是先转换为python对象,逐行读取rows,最后逐行执行相应的sql语句 插入成功则返回 `jsonify({'message': 'data inserted successfully'}), 200` **update**: |方法|路径| |----|----| |`PUT`|`/api/v1/`| 以departments为例,请求中的json数据: ``` { "dept_no": "d010", "dept_name": "Operations" } ``` 这里传入的一个json数据中,应带有主键值对+需要更新的全部键值对;具体实现是通过if-elif,针对不同表,寻找相应的主键进行update更新 更新成功则返回 `jsonify({'message': 'data updated successfully'}), 200` **delete**: |方法|路径| |----|----| |`DELETE`|`/api/v1//`| 对于表`dept_emp`或者`dept_manager`,使用`/`,删除指定的记录; 对于表`employees`,使用``; 对于表`departments`,使用``;对于表`titles`,使用`//<from_date>`; 如果删除成功,返回`json`格式数据 `{'message': 'data deleted successfully'}`,状态号204 实际中是使用if-elif判断表格的类型,然后通过对应的主键删除记录 **select**: |方法|路径| |----|----| |`GET`|`/api/v1/<table_name>/<path:args>`| 示例路径: `http://127.0.0.1:5555/api/v1/titles/10002/Staff/1996-08-03` 根据if-else条件,参数都是被查询表的主键的值,它们需要按照表中的顺序排列(与delete相似); |`<table_name>` |`<path:args>` | |-----|----| |dept_emp、dept_manager|emp_no/dept_no| |employees|emp_no| |departments|dept_no| |titles|emp_no/title/from_date| 具体的实现方式为,首先加入表名、主键和要查找的目标主键值,拼凑出sql语句并执行,然后通过cursor.fetchall()获取结果,将结果转化为json格式返回 如果成功找到,返回查询结果(可能包含多行),状态号200 **select_data_condition**: |方法|路径| |----|----| |`GET`|`/api/v1/<table_name>?<query-args>`| 示例路径:` http://127.0.0.1:5555/api/v1/titles?to_date=1995-12-01` Query参数:就是`<query-args>`;其内部只能包含一种条件,比如`to_date=1995-12-01` 具体的实现方式为,首先加入表名、条件,拼凑出sql语句并执行,然后通过cursor.fetchall()获取结果,将结果转化为json格式返回 如果成功找到,返回查询结果(可能包含多行),状态号200 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request