flask連接并操作數(shù)據(jù)庫的實現(xiàn)示例
前言
在Flask框架中,數(shù)據(jù)庫的操作是一個核心功能,它允許開發(fā)者與后端數(shù)據(jù)庫進行交互,執(zhí)行數(shù)據(jù)的增刪改查操作。本文將詳細介紹如何在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應用中,需要配置數(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}>'這里定義了一個用戶模型,對應數(shù)據(jù)庫中的用戶信息表,屬性包括:id、用戶名和email,對應的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 '插入失敗,可能是用戶名或郵箱重復', 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 '更新失敗,可能是用戶名或郵箱重復', 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-01
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ā)編程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
matplotlib 曲線圖 和 折線圖 plt.plot()實例
這篇文章主要介紹了matplotlib 曲線圖 和 折線圖 plt.plot()實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路
這篇文章主要介紹了python 使用多線程創(chuàng)建一個Buffer緩存器的實現(xiàn)思路,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
20個Python?random模塊常用函數(shù)的應用與代碼示例
隨機數(shù)在計算機科學和數(shù)據(jù)科學領(lǐng)域中扮演著重要角色,Python的標準庫中提供了random模塊,用于生成各種隨機數(shù),本文將深入探討random模塊的各種函數(shù),以及它們的應用場景和代碼示例,需要的可以參考下2024-03-03
基于OpenCV實現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能
下面就使用VLAD表示圖像,實現(xiàn)一個小型的圖像數(shù)據(jù)庫的檢索程序。下面實現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細,對OpenCV圖像數(shù)據(jù)庫檢索功能感興趣的朋友跟隨小編一起看看吧2021-12-12

