flask連接并操作數(shù)據(jù)庫的實現(xiàn)示例
前言
在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)方法(推薦)
下面小編就為大家?guī)硪黄狿ython下的Softmax回歸函數(shù)的實現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01windows、linux下打包Python3程序詳細(xì)方法
這篇文章主要介紹了windows、linux下打包Python3程序詳細(xì)方法,需要的朋友可以參考下2020-03-03Python帶動態(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ā)編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08matplotlib 曲線圖 和 折線圖 plt.plot()實例
這篇文章主要介紹了matplotlib 曲線圖 和 折線圖 plt.plot()實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路
這篇文章主要介紹了python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-0720個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ù)庫檢索功能
下面就使用VLAD表示圖像,實現(xiàn)一個小型的圖像數(shù)據(jù)庫的檢索程序。下面實現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細(xì),對OpenCV圖像數(shù)據(jù)庫檢索功能感興趣的朋友跟隨小編一起看看吧2021-12-12