flask连接并操作数据库的实现示例

 更新时间:2024年12月31日 09:08:27   作者:奈何不吃鱼  
本文详细介绍了在Flask框架中连接并操作数据库的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

在Flask框架中,数据库的操作是一个核心功能,它允许开发者与后端数据库进行交互,执行数据的增删改查操作。本文将详细介绍如何在Flask中连接并操作数据库,包括使用Flask-SQLAlchemy扩展和直接使用MySQL的Python驱动。

常见的有三种操作方法:使用 SQLAlchemy、使用 Flask-SQLAlchemy 连接 MySQL和直接使用 MySQL 的 Python 驱动,本篇先讲述如何使用SQLAlchemy进行连接,后续会对其他方式进行讲解。

一、 安装必要的库

首先,安装Flask-SQLAlchemy和MySQL的Python驱动。可以通过以下命令安装:

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

二、配置数据库连接

在Flask应用中,需要配置数据库的地址(一般情况下,不建议直接在项目头部配置,此处只为演示,建议写在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中,模型是数据库表的Python类,每个模型类代表数据库中的一张表。例如:

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}>'

这里定义了一个用户模型,对应数据库中的用户信息表,属性包括: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;

四、操作数据库

配置好以上内容后,我们就可以通过SQLAlchemy 提供的 ORM 功能操作数据库了,我们简单的用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'数据库错误: {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'数据库错误: {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])

五、测试结果

此时查询发生变化

至此,我们完成了使用flask连接并操作数据库,其实使用python开发后端项目非常的轻松,相比结构缜密的springboot,偶尔使用flask写一些小项目也是不错的选择哦。

到此这篇关于flask连接并操作数据库的实现示例的文章就介绍到这了,更多相关flask连接操作数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python下的Softmax回归函数的实现方法(推荐)

    Python下的Softmax回归函数的实现方法(推荐)

    下面小编就为大家带来一篇Python下的Softmax回归函数的实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • windows、linux下打包Python3程序详细方法

    windows、linux下打包Python3程序详细方法

    这篇文章主要介绍了windows、linux下打包Python3程序详细方法,需要的朋友可以参考下
    2020-03-03
  • Python带动态参数功能的sqlite工具类

    Python带动态参数功能的sqlite工具类

    这篇文章主要介绍了Python带动态参数功能的sqlite工具类,涉及Python针对sqlite数据库的连接、查询、sql语句执行等相关操作封装与使用技巧,需要的朋友可以参考下
    2018-05-05
  • 详解Python并发编程之从性能角度来初探并发编程

    详解Python并发编程之从性能角度来初探并发编程

    这篇文章主要介绍了详解Python并发编程之从性能角度来初探并发编程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    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知识点总结

    python框架中flask知识点总结

    这篇文章给大家分享了关于学习python框架中flask知识点的总结内容,有兴趣的朋友们可以学习下。
    2018-08-08
  • python 使用多线程创建一个Buffer缓存器的实现思路

    python 使用多线程创建一个Buffer缓存器的实现思路

    这篇文章主要介绍了python 使用多线程创建一个Buffer缓存器的实现思路,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 20个Python random模块常用函数的应用与代码示例

    20个Python random模块常用函数的应用与代码示例

    随机数在计算机科学和数据科学领域中扮演着重要角色,Python的标准库中提供了random模块,用于生成各种随机数,本文将深入探讨random模块的各种函数,以及它们的应用场景和代码示例,需要的可以参考下
    2024-03-03
  • 基于OpenCV实现小型的图像数据库检索功能

    基于OpenCV实现小型的图像数据库检索功能

    下面就使用VLAD表示图像,实现一个小型的图像数据库的检索程序。下面实现需要的功能模块,分步骤给大家介绍的非常详细,对OpenCV图像数据库检索功能感兴趣的朋友跟随小编一起看看吧
    2021-12-12

最新评论