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

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

目录
前言
一、 安装须要的库
二、设置数据库连接
 三、定义模型
四、操作数据库
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'<User {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/<int:user_id>', 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/<int:user_id>', 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 '<br>'.join([f'{user.username} ({user.email})' for user in users])
复制代码
五、测试效果




此时查询发生变化


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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表