欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

flask連接并操作數(shù)據(jù)庫的實現(xiàn)示例

 更新時間:2024年12月31日 09:08:27   作者:奈何不吃魚  
本文詳細(xì)介紹了在Flask框架中連接并操作數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在Flask框架中,數(shù)據(jù)庫的操作是一個核心功能,它允許開發(fā)者與后端數(shù)據(jù)庫進行交互,執(zhí)行數(shù)據(jù)的增刪改查操作。本文將詳細(xì)介紹如何在Flask中連接并操作數(shù)據(jù)庫,包括使用Flask-SQLAlchemy擴展和直接使用MySQL的Python驅(qū)動。

常見的有三種操作方法:使用 SQLAlchemy、使用 Flask-SQLAlchemy 連接 MySQL和直接使用 MySQL 的 Python 驅(qū)動,本篇先講述如何使用SQLAlchemy進行連接,后續(xù)會對其他方式進行講解。

一、 安裝必要的庫

首先,安裝Flask-SQLAlchemy和MySQL的Python驅(qū)動??梢酝ㄟ^以下命令安裝:

pip install -U SQLAlchemy
pip install pymysql  # Python3 使用pymysql
pip install mysqlclient

二、配置數(shù)據(jù)庫連接

在Flask應(yīng)用中,需要配置數(shù)據(jù)庫的地址(一般情況下,不建議直接在項目頭部配置,此處只為演示,建議寫在config.py中進行變量配置),這里的username等信息需要換成實際信息:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

 三、定義模型

在Flask-SQLAlchemy中,模型是數(shù)據(jù)庫表的Python類,每個模型類代表數(shù)據(jù)庫中的一張表。例如:

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

這里定義了一個用戶模型,對應(yīng)數(shù)據(jù)庫中的用戶信息表,屬性包括:id、用戶名和email,對應(yīng)的mysql表如下:

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(80) NOT NULL,
  `email` VARCHAR(120) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `username_unique` (`username` ASC),
  UNIQUE INDEX `email_unique` (`email` ASC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

四、操作數(shù)據(jù)庫

配置好以上內(nèi)容后,我們就可以通過SQLAlchemy 提供的 ORM 功能操作數(shù)據(jù)庫了,我們簡單的用CURD操作進行測試 ~

1.添加用戶

# 添加用戶路由
@app.route('/add_user', methods=['POST'])
def add_user():
    data = request.get_json()
    username = data.get('username')
    email = data.get('email')

    if not username or not email:
        return '缺少用戶名或郵箱地址', 400

    # 檢查 email 是否已存在
    existing_user = User.query.filter_by(email=email).first()
    if existing_user:
        return '郵箱已存在,無法添加用戶', 400

    new_user = User(username=username, email=email)
    db.session.add(new_user)
    try:
        db.session.commit()
    except IntegrityError:
        db.session.rollback()
        return '插入失敗,可能是用戶名或郵箱重復(fù)', 400
    except Exception as e:
        db.session.rollback()
        return f'數(shù)據(jù)庫錯誤: {str(e)}', 500

    return '用戶添加成功'

2.刪除用戶

# 刪除用戶路由
@app.route('/delete_user/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    user = User.query.get(user_id)
    if not user:
        return '用戶不存在', 404

    db.session.delete(user)
    db.session.commit()
    return '用戶刪除成功'

3.更新用戶信息

# 更新用戶路由
@app.route('/update_user/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = User.query.get(user_id)
    if not user:
        return '用戶不存在', 404

    data = request.get_json()
    new_username = data.get('username')
    new_email = data.get('email')

    # 更新用戶名和郵箱
    if new_username:
        user.username = new_username
    if new_email:
        existing_user = User.query.filter_by(email=new_email).first()
        if existing_user and existing_user.id != user_id:
            return '郵箱已存在,無法更新用戶信息', 400
        user.email = new_email

    try:
        db.session.commit()
    except IntegrityError:
        db.session.rollback()
        return '更新失敗,可能是用戶名或郵箱重復(fù)', 400
    except Exception as e:
        db.session.rollback()
        return f'數(shù)據(jù)庫錯誤: {str(e)}', 500

    return '用戶更新成功'

4查詢所有用戶

# 獲取所有用戶路由
@app.route('/get_all', methods=['GET'])
def get_users():
    users = User.query.all()
    return '<br>'.join([f'{user.username} ({user.email})' for user in users])

五、測試結(jié)果

此時查詢發(fā)生變化

至此,我們完成了使用flask連接并操作數(shù)據(jù)庫,其實使用python開發(fā)后端項目非常的輕松,相比結(jié)構(gòu)縝密的springboot,偶爾使用flask寫一些小項目也是不錯的選擇哦。

到此這篇關(guān)于flask連接并操作數(shù)據(jù)庫的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)flask連接操作數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python下的Softmax回歸函數(shù)的實現(xiàn)方法(推薦)

    Python下的Softmax回歸函數(shù)的實現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄狿ython下的Softmax回歸函數(shù)的實現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • windows、linux下打包Python3程序詳細(xì)方法

    windows、linux下打包Python3程序詳細(xì)方法

    這篇文章主要介紹了windows、linux下打包Python3程序詳細(xì)方法,需要的朋友可以參考下
    2020-03-03
  • Python帶動態(tài)參數(shù)功能的sqlite工具類

    Python帶動態(tài)參數(shù)功能的sqlite工具類

    這篇文章主要介紹了Python帶動態(tài)參數(shù)功能的sqlite工具類,涉及Python針對sqlite數(shù)據(jù)庫的連接、查詢、sql語句執(zhí)行等相關(guān)操作封裝與使用技巧,需要的朋友可以參考下
    2018-05-05
  • 詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程

    詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程

    這篇文章主要介紹了詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • matplotlib 曲線圖 和 折線圖 plt.plot()實例

    matplotlib 曲線圖 和 折線圖 plt.plot()實例

    這篇文章主要介紹了matplotlib 曲線圖 和 折線圖 plt.plot()實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 解決python3 安裝不了PIL的問題

    解決python3 安裝不了PIL的問題

    今天小編就為大家分享一篇解決python3 安裝不了PIL的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python框架中flask知識點總結(jié)

    python框架中flask知識點總結(jié)

    這篇文章給大家分享了關(guān)于學(xué)習(xí)python框架中flask知識點的總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路

    python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路

    這篇文章主要介紹了python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 20個Python?random模塊常用函數(shù)的應(yīng)用與代碼示例

    20個Python?random模塊常用函數(shù)的應(yīng)用與代碼示例

    隨機數(shù)在計算機科學(xué)和數(shù)據(jù)科學(xué)領(lǐng)域中扮演著重要角色,Python的標(biāo)準(zhǔn)庫中提供了random模塊,用于生成各種隨機數(shù),本文將深入探討random模塊的各種函數(shù),以及它們的應(yīng)用場景和代碼示例,需要的可以參考下
    2024-03-03
  • 基于OpenCV實現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能

    基于OpenCV實現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能

    下面就使用VLAD表示圖像,實現(xiàn)一個小型的圖像數(shù)據(jù)庫的檢索程序。下面實現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細(xì),對OpenCV圖像數(shù)據(jù)庫檢索功能感興趣的朋友跟隨小編一起看看吧
    2021-12-12

最新評論