• 【Flask】四、flask连接并操作数据库


    目录

    前言

    一、 安装必要的库

    二、配置数据库连接

     三、定义模型

    四、操作数据库

    1.添加用户

    2.删除用户

    3.更新用户信息

    4查询所有用户

    五、测试结果


    前言

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

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

    一、 安装必要的库

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

    1. pip install -U SQLAlchemy
    2. pip install pymysql # Python3 使用pymysql
    3. pip install mysqlclient

    二、配置数据库连接

    在Flask应用中,需要配置数据库的地址(一般情况下,不建议直接在项目头部配置,此处只为演示,建议写在config.py中进行变量配置),这里的username等信息需要换成实际信息:

    1. from flask import Flask
    2. from flask_sqlalchemy import SQLAlchemy
    3. app = Flask(__name__)
    4. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
    5. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    6. db = SQLAlchemy(app)

     三、定义模型

    在Flask-SQLAlchemy中,模型是数据库表的Python类,每个模型类代表数据库中的一张表。例如:

    1. class User(db.Model):
    2. __tablename__ = 'users'
    3. id = db.Column(db.Integer, primary_key=True)
    4. username = db.Column(db.String(80), unique=True, nullable=False)
    5. email = db.Column(db.String(120), unique=True, nullable=False)
    6. def __repr__(self):
    7. return f'{self.username}>'

    这里定义了一个用户模型,对应数据库中的用户信息表,属性包括:id、用户名和email,对应的mysql表如下:

    1. CREATE TABLE `users` (
    2. `id` INT NOT NULL AUTO_INCREMENT,
    3. `username` VARCHAR(80) NOT NULL,
    4. `email` VARCHAR(120) NOT NULL,
    5. PRIMARY KEY (`id`),
    6. UNIQUE INDEX `username_unique` (`username` ASC),
    7. UNIQUE INDEX `email_unique` (`email` ASC)
    8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    四、操作数据库

            配置好以上内容后,我们就可以通过SQLAlchemy 提供的 ORM 功能操作数据库了,我们简单的用CURD操作进行测试 ~

    1.添加用户

    1. # 添加用户路由
    2. @app.route('/add_user', methods=['POST'])
    3. def add_user():
    4. data = request.get_json()
    5. username = data.get('username')
    6. email = data.get('email')
    7. if not username or not email:
    8. return '缺少用户名或邮箱地址', 400
    9. # 检查 email 是否已存在
    10. existing_user = User.query.filter_by(email=email).first()
    11. if existing_user:
    12. return '邮箱已存在,无法添加用户', 400
    13. new_user = User(username=username, email=email)
    14. db.session.add(new_user)
    15. try:
    16. db.session.commit()
    17. except IntegrityError:
    18. db.session.rollback()
    19. return '插入失败,可能是用户名或邮箱重复', 400
    20. except Exception as e:
    21. db.session.rollback()
    22. return f'数据库错误: {str(e)}', 500
    23. return '用户添加成功'

    2.删除用户

    1. # 删除用户路由
    2. @app.route('/delete_user/', methods=['DELETE'])
    3. def delete_user(user_id):
    4. user = User.query.get(user_id)
    5. if not user:
    6. return '用户不存在', 404
    7. db.session.delete(user)
    8. db.session.commit()
    9. return '用户删除成功'

    3.更新用户信息

    1. # 更新用户路由
    2. @app.route('/update_user/', methods=['PUT'])
    3. def update_user(user_id):
    4. user = User.query.get(user_id)
    5. if not user:
    6. return '用户不存在', 404
    7. data = request.get_json()
    8. new_username = data.get('username')
    9. new_email = data.get('email')
    10. # 更新用户名和邮箱
    11. if new_username:
    12. user.username = new_username
    13. if new_email:
    14. existing_user = User.query.filter_by(email=new_email).first()
    15. if existing_user and existing_user.id != user_id:
    16. return '邮箱已存在,无法更新用户信息', 400
    17. user.email = new_email
    18. try:
    19. db.session.commit()
    20. except IntegrityError:
    21. db.session.rollback()
    22. return '更新失败,可能是用户名或邮箱重复', 400
    23. except Exception as e:
    24. db.session.rollback()
    25. return f'数据库错误: {str(e)}', 500
    26. return '用户更新成功'

    4查询所有用户

    1. # 获取所有用户路由
    2. @app.route('/get_all', methods=['GET'])
    3. def get_users():
    4. users = User.query.all()
    5. return '
      '
      .join([f'{user.username} ({user.email})' for user in users])

    五、测试结果

    此时查询发生变化

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

  • 相关阅读:
    关于嵌入式人工智能?
    VUE----通过nvm管理node版本
    SpringBoot-SpringBoot中文文档
    < lambda表达式与包装器>——《C++高阶》
    云架构师学习------腾讯云通识-存储与数据库
    Centralized Feature Pyramid for Object Detection解读
    小插曲 -- 使用Visual Studio Code远程连接香橙派
    aws的alb,多个域名绑定多个网站实践
    【WALT】update_task_demand() 代码详解
    stm32摄像头调试 | 串口传输照片数据 | 用python来设计上位机通信软件
  • 原文地址:https://blog.csdn.net/naihe_fish/article/details/143314068