使用Python实现接口的增删改查

提到Python,不得不感叹,简直不要太好用...
那么在Python中如何编写服务端的接口呢,方式有许多,今天主要说一下Flask,Flask是一个用Python编写的Web应用程序框架,具有轻量级和简洁性,还有强大的可扩展性等优点。
最简单的示例:

from flask import Flask  
  
app = Flask(__name__)  
  
@app.route('/')  
def hello_world():  
    return 'Hello, Flask!'  
  
if __name__ == '__main__':  
    app.run(debug=True)

这样我们就可以在浏览器访问到最简单的“Hello, Flask!”了,不过前提是你已经成功安装Flask 。

由于实际工作中可能会涉及更多内容,比如接收不同请求方式参数、数据库的连接和操作、跨域解决等等一系列问题,下面就进行一一解答。
cmd 安装以下指令:

# 安装指令
pip install pymysql 
pip install flask 
pip install flask_cors 

打开Pycharm,在设置中查看Python解析器是否有这几个软件包,如果有则代表安装成功。


image.png

新建一个新文件,导入依赖包

# 需要用到的包引入
from pymysql import Connection
from flask import Flask, request, jsonify
from flask_cors import CORS

导入完毕后,开始连接数据库,我在本地已经成功安装MySQL并且创建了test数据库,里面有一张student表格,如果没有安装请自行安装并新建表格。


企业微信截图_17134282429733.png
conn = Connection(
    host="localhost",
    port=3306,
    user="root",
    password="123456",
    autocommit=True
)

# 获取游标对象
cursor = conn.cursor()
# 选择数据库
conn.select_db("test")

接下来是启动服务和解决跨域问题

# 后端服务启动
app = Flask(__name__)
# 为所有路径启用CORS
CORS(app)

接下来是接口定义部分,直接贴代码吧,其实我注释写得还蛮多,应该能看明白。

# 获取列表数据
@app.route("/student/list", methods=['GET'])
def student_list():
    # 获取某个参数,例如 'name'
    name = request.args.get('name')
    # 构造查询语句
    if name:
        # 使用LIKE操作符和通配符%来查询包含name的记录
        query = "select * from student where name like %s"
        # 使用%%作为通配符%的转义,因为%在SQL中是特殊字符
        cursor.execute(query, ('%' + name + '%',))
    else:
        # 如果没有name参数,查询所有记录
        query = "select * from student"
        cursor.execute(query)

    try:
        # 获取查询结果
        data = cursor.fetchall()
    except Exception as e:
        # 处理数据库查询异常
        print(f"查询异常: {e}")
        return jsonify([]), 500

    # 将结果转换为字典列表
    # 这段代码使用了Python的列表推导式(list comprehension)来将一个数据库查询结果列表转换为包含字典的列表
    result = [
        {
            "id": row[0],
            "name": row[1],
            "age": row[2]
        } for row in data
    ]

    # 返回JSON响应
    return jsonify(result)

# 增加一条数据
@app.route("/student", methods=['POST'])
def create_student():
    name = request.form.get("name")
    age = request.form.get("age")
    ids = request.form.get("id")  # 这个id其实不应该传,应该是后端定一个规则自动生成的,这里偷懒了

    if not name or not age or not ids:
        return jsonify({"message": "缺少必填参数"}), 400

    query = "insert into student (name, age, id) values (%s, %s, %s)"
    try:
        cursor.execute(query, (name, age, ids))
        return jsonify({"message": f"学生{name}新增成功"}), 200
    except Exception as e:
        return jsonify({"message": str(e)}), 500
# 删除某条数据
@app.route("/student/<int:student_id>", methods=['DELETE'])
def delete_student(student_id):
    query = "delete from student where id=%s"
    try:
        cursor.execute(query, (student_id,))
        return jsonify({"message": f"学生 {student_id} 删除成功"}), 200
    except Exception as e:
        return jsonify({"message": str(e)}), 500
# 修改某条数据
@app.route("/student/<int:student_id>", methods=['PUT'])
def update_student(student_id):
    name = request.form.get("name")
    age = request.form.get("age")

    if not name and not age:
        return jsonify({"message": "缺少必要参数"}), 400

    update_query = "update student set "
    update_params = []

    if name:
        update_query += "name=%s, "
        update_params.append(name)
    if age:
        update_query += "age=%s, "
        update_params.append(age)

    update_query = update_query.rstrip(', ')

    query = f"{update_query} where id=%s"
    update_params.append(student_id)
    # print(query)
    # print(update_params)
    try:
        cursor.execute(query, tuple(update_params))
        return jsonify({"message": f"学生{name}信息更新成功"}), 200
    except Exception as e:
        return jsonify({"message": str(e)}), 500

最后定义运行在哪里以及端口号等

if __name__ == "__main__":
    app.run("0.0.0.0", port=9090, debug=True)
    conn.close() # 关闭数据库连接

使用postman 测试一下查询的接口:


企业微信截图_17134290049260.png

查询结果正确,很完美!

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容