使用Python實現接口的增刪改查

提到Python,不得不感嘆,簡直不要太好用...
那么在Python中如何編寫服務端的接口呢坏怪,方式有許多,今天主要說一下Flask绊茧,Flask是一個用Python編寫的Web應用程序框架铝宵,具有輕量級和簡潔性,還有強大的可擴展性等優(yōu)點华畏。
最簡單的示例:

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并且創(chuàng)建了test數據庫,里面有一張student表格止剖,如果沒有安裝請自行安裝并新建表格腺阳。


企業(yè)微信截圖_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其實不應該傳,應該是后端定一個規(guī)則自動生成的购公,這里偷懶了

    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 測試一下查詢的接口:


企業(yè)微信截圖_17134290049260.png

查詢結果正確萌京,很完美!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末宏浩,一起剝皮案震驚了整個濱河市知残,隨后出現的幾起案子,更是在濱河造成了極大的恐慌绘闷,老刑警劉巖橡庞,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異印蔗,居然都是意外死亡扒最,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門华嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吧趣,“玉大人,你說我怎么就攤上這事耙厚∏看欤” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵薛躬,是天一觀的道長俯渤。 經常有香客問我,道長型宝,這世上最難降的妖魔是什么八匠? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮趴酣,結果婚禮上梨树,老公的妹妹穿的比我還像新娘。我一直安慰自己岖寞,他們只是感情好抡四,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仗谆,像睡著了一般指巡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隶垮,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天厌处,我揣著相機與錄音,去河邊找鬼岁疼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的捷绒。 我是一名探鬼主播瑰排,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼暖侨!你這毒婦竟也來了椭住?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤字逗,失蹤者是張志新(化名)和其女友劉穎京郑,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體葫掉,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡些举,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了俭厚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片户魏。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挪挤,靈堂內的尸體忽然破棺而出叼丑,到底是詐尸還是另有隱情,我是刑警寧澤扛门,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布鸠信,位于F島的核電站,受9級特大地震影響论寨,放射性物質發(fā)生泄漏星立。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一政基、第九天 我趴在偏房一處隱蔽的房頂上張望贞铣。 院中可真熱鬧,春花似錦沮明、人聲如沸辕坝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酱畅。三九已至,卻和暖如春江场,著一層夾襖步出監(jiān)牢的瞬間纺酸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工址否, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留餐蔬,地道東北人碎紊。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像樊诺,于是被迫代替她去往敵國和親仗考。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容