Flask 通过SQLAlchemy连接mySQL实现一个实用的用户管理功能

Flask+mysql 实现增删改查接口开发+测试(图文教程附源码) 目录 一、前言 二、环境准备 2.1 安装python 2.2 安装mysql 三、工具准备 3.1 安装pycharm 3.2 安装Navicat 3.3 安装postman 四、mysql数据库准备 4.1 Navicat连接 4.2 数据库准备 五、增删改查接口(服务)开发 5.1 表的增删改查操作 5.2 增加接口服务 5.3 删除接口服务 5.4 修改接口服务 5.5 查询接口服务 六、接口测试 6.1 测试增加接口服务 6.2测试删除接口服务 ... 阅读详情

Flask 通过SQLAlchemy连接mySQL实现一个实用的用户管理功能

安装配置

首先确保已经安装如下程序:

  1. flask:用于构建web应用程序。
  2. flask-sqlalchemy:用于在 Flask 中连接 MySQL 数据库,通过pip install flask-sqlalchemy安装。
  3. pymysql:运行时可能会出现出现 ModuleNotFoundError: No module named ‘MySQLdb’ 错误,通常是由于缺少 MySQL Python 驱动程序导致的。这里我使用的是 PyMySQL 作为 MySQL 的连接器,通过pip install pymysql安装后,在连接数据库时将连接字符串中的 mysql 替换为 mysql+pymysql即可。
配置数据库连接信息,并创建 SQLAlchemy 用户对象

在配置文件模块config.py中,配置 数据库连接信息,并创建 SQLAlchemy 用户对象,这样就可以在其他地方直接引用:

# config.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()  # 创建全局的 SQLAlchemy 实例

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    db.init_app(app)  # 在应用工厂函数中初始化 SQLAlchemy 实例
    
    return app

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True, nullable=False)
    nickname = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(50), nullable=False)

注意,在app.config[‘SQLALCHEMY_DATABASE_URI’] = 'mysql+pymysql://username:password@localhost/db_name’中要将对应的数据库用户名、密码、地址、表名换成自己数据的真实信息。

编写 routers.py 路由模块

在 routers.py 文件中,编写用户列表、新增用户、删除用户接口

# routers.py
from flask import Blueprint, render_template,request,redirect,url_for,jsonify
from config import db,User  # 导入应用工厂函数中初始化的 SQLAlchemy 实例

bp = Blueprint('main', __name__)

@bp.route('/')
def index():
    # 打开数据库连接
    db.create_all()

    # 查询所有用户
    users = User.query.all()

    # 关闭数据库连接
    db.session.close()
   
    return render_template('users.html',users=users)

@bp.route('/add',methods=['GET'])
def add():
    return render_template('addUser.html')

@bp.route('/add_user', methods=['POST'])
def add_user():
    # 打开数据库连接
    db.create_all()

    # 获取请求数据
    data = request.get_json()
    username = data.get('username')
    nickname = data.get('nickname')
    password = data.get('password')

    # 创建新用户
    new_user = User(username=username, nickname=nickname, password=password)
    print(new_user)
    db.session.add(new_user)
    db.session.commit()

    # 关闭数据库连接
    db.session.close()

    return 'User added successfully'
    # return redirect(url_for('main.index'))

@bp.route('/del_user', methods=['POST'])
def del_user():
    # 打开数据库连接
    db.create_all()

    # 获取请求数据
    data = request.get_json()
    username = data.get('username')
    user = User.query.filter_by(username={username}).first()
    print(user)

    if user:
        # 删除用户
        db.session.delete(user)
        db.session.commit()

        # 关闭数据库连接
        db.session.close()
        return 'User added successfully'
        # return redirect(url_for('main.index')) 在
    else:
        return 'User not found'

def init_routes(app):
    app.register_blueprint(bp)

这里我使用了 Blueprint 编写路由,便于后期项目管理,也可以不使用。注意,在 Blueprint 中要实现路由跳转,需要写return redirect(url_for('main.index')),如果写成return redirect(url_for('index'))将无法跳转。

用户列表 html 页面

用户列表页面:users.html代码如下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户列表</title>
</head>
<body>
    <h2>用户列表</h2>
    <ul>
        {% for user in users %}
        <li>{{user.username}}-{{user.nickname}} <button onclick="delUser('{{user.username}}')">删除用户</button></li>
        {% endfor %}
    </ul>
    <a href="http://localhost:5000/add">新增用户</a>

    <script>
        function delUser(username) {
            fetch('/del_user', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ username: username })
            }).then(response => {
                console.log(response);
                if (response.ok) {
                    // 请求成功,重定向到首页,从而刷新页面
                    window.location.href = '/';
                } else {
                    alert('删除用户失败');
                }
            })
        }
    </script>

</body>
</html>
新增用户 html 页面

新增用户页面:addUser.html代码如下

<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form>
        <h2>新增用户</h2>
        <table>
            <tr>
                <td>Username</td>
                <td><input type="text" name="username" id="username"></td>
            </tr>
            <tr>
                <td>Nickname</td>
                <td><input type="text" name="nickname" id="nickname"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="password" id="password"></td>
            </tr>
            <tr>
                <td><button onclick="addUser()">提交</button></td>
            </tr>
            <tr>
                <td><a href="http://localhost:5000/">查看用户列表</a></td>
            </tr>
        </table>
    </form>

    <script>
        function addUser() {
            var username = document.getElementById('username').value;
            var nickname = document.getElementById('nickname').value;
            var password = document.getElementById('password').value;
            var data = {
                username: username,
                nickname: nickname,
                password: password
            };
            if (username && nickname && password) {
                fetch('/add_user', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(data)
                }).then(response => {
                    if (response.ok) {
                        alert('新增用户成功');
                        // 请求成功,重定向到首页,从而刷新页面,视需求而定
                        // window.location.href = '/';
                    } else {
                        alert('新增用户失败');
                    }
                })
            } else {
                alert('请输入表单信息');
            }
        }
    </script>
</body>
</html>
编写 main.py 主程序

最后,在主程序 main.py 中,引入对应模块,并注入app中

# main.py
from config import create_app, db
from routes import init_routes

# 调用应用工厂函数创建应用实例
app = create_app()

init_routes(app)

if __name__ == '__main__':
    app.run(debug=True)

运行,预览效果

运行 main.py 文件,可以看到

在这里插入图片描述
在这里插入图片描述

Flask数据库操作及Flask-SQLAlchemy Flask数据库操作-Flask-SQLAlchemy 阅读详情

相关推荐

Flask实现登录功能【附完整Demo】

网站少不了要和数据库打交道,归根到底都是一些增删改查操作,这里做一个简单的用户登录功能来学习一下Flask如何操作MySQL。 用到的一些知识点:Flask-SQLAlchemy、Flask-Login、Flask-WTF、PyMySQL 这里通过一个完整的登录实例来介绍,程序已经成功运行,在未登录时拦截了success.html页面跳转到登录页面,登录成功后才能访问success。 以下是项目的...

Java知音 3万+

flask-sqlalchemy操作mysql

flask_sqlalchemy

qq_46423987的博客 3210

Flask 学习-12.Flask-SQLAlchemy 连接 mysql 数据库

SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。SQLAlchemy 是目前python中最强大的 ORM框架, 功能全面。 Flask-SQLAlchemy 是一个为 Flask 应用插件,封装了SQLAlchemy,简化了操作,只需添加配置项就可以在Flask 项目中使用。...

qq_27371025的博客 2008

【flask-sqlalchemy】SQLAlchemy+PyMysql到mysql的映射

【flask-sqlalchemy】SQLAlchemy+PyMysql到mysql的映射

记录学习,一起进步 2326

SAP固定资产原值与净值取值逻辑全解析:从数据表到ABAP实战

在企业资源计划(ERP)系统中,固定资产的价值管理是财务会计的核心模块,其关键在于准确核算资产原值与净值。从技术原理上看,这涉及对资产全生命周期业务(如购置、折旧、转移、报废)的财务建模,以及底层数据表(如ANLC、ANEP)的精准关联与计算。掌握这一逻辑的技术价值在于,能够确保财务报表数据的准确性,满足合规性要求,并为管理决策提供可靠依据。在SAP ECC或S/4HANA系统的应用场景中,ABAP开发者与财务顾问常需通过编写报表程序,从复杂的数据结构中提取资产价值信息。本文聚焦于SAP资产会计模块,深入剖

weixin_30984001的博客 393

DATCOM GUI——DATCOM-Tools使用介绍

简介 本工具以1976年美国空军稳定性与操纵性计算程序(USAF STABILITY AND CONTROL DIGITAL DATCOM PROGRAM)为基础进行开发,目的是提供更为简洁方便的外形输入方式,并带有三维绘图与气动特性输出功能。 安装与环境配置 1、 代码以Holy Cows公司提供的DATCOM程序为基础,首先下载其安装包(window,Linux均有)。 2、 安装到你想要的位置,注意不要有中文路径 3、 测试DATCOM是否能够正常运行。复制examples文件夹中的Citation

qq_40800981的博客 1万+

flask笔记 02 | Flask数据库连接(sqlite、mysql)

直接运行以上代码,会发现报错“RuntimeError: Working outside of application context.”(下图),需要撤销注释【1】hostname:服务器主机ip,可以是本地主机(localhost)也可以是远程服务器。pip install pymysql # 首先保证安装有mysql应用程序。== flask连接sqlite数据库(以下可能会报错,请注意注释!URI: 统一资源标识符,用于标识某一互联网资源名称的字符串。database:表示要使用的数据库。

2301_76435948的博客 4305

《童虎学习笔记》5分钟用Keepalived搭建MySQL高可用实现虚ip自动漂移

1

tonghu_note的博客 5618

史上超详细的flask_sqlalchemy连接mysql数据库

https://www.jianshu.com/p/1ba45bd6c351 Python+Flask安装:https://www.jianshu.com/p/cd1925e90eda Flask路径参数以及请求参数讲解:https://www.jianshu.com/p/54057b4f0437 首先安装pymysql,命令如下:pip install pymysql 安装过程中看到成功...

james_laughing的博客 6148

Modbus4J vs EasyModbus4J:哪个Java库更适合你的工业项目?

本文深入对比了Java领域两大Modbus通信库Modbus4J与EasyModbus4J。Modbus4J设计稳健、类型安全,适合复杂业务集成;EasyModbus4J基于Netty,在高并发场景下性能更优。文章从架构、性能、API及生产环境多维度分析,为工业物联网项目选型提供决策依据。

weixin_28475533的博客 310

马尔可夫网络和贝叶斯网络的一些总结

马尔可夫网络和贝叶斯网络的一些总结 最近学习了一些关于概率逻辑的知识图谱推理方法,主要就是贝叶斯网络和马尔可夫网络,在此总结一下,内容都来自网络资料,这里加入了一下个人的理解,尽量为大家避雷! 这篇文章是我目前在网络上找到的关于贝叶斯网络最清晰的介绍,大家有兴趣可以去看看 贝叶斯网络中比较重要的两部分就是贝叶斯网络的结构和条件概率表。 贝叶斯网络的结构 下面通过一个例子来介绍: 贝叶斯网的网络结...

qq_43654303的博客 4374

Flask连接Mysql数据库(SQLAlchemy)

Flask-SQLAlchemy 是 Flask 的一个扩展,用于简化数据库操作。它结合了 SQLAlchemy 的强大功能和 Flask 的灵活性,支持对象关系映射(ORM),使开发者可以使用 Python 类和对象来表示数据库表和记录,而无需编写复杂的 SQL 语句。

weixin_61845079的博客 1840

audio语音相关的基础知识-VAD,ASR,AEC,AGC,BF等

有音素之间的间隙,也有静音和语音本身的间隙,为了对数据从时间上进行相对的校准,语音端点检测技术就应运而生了,因此端点检测技术可以决定这种校准的相对精度,使得同一内容的特征更趋于相同,当然,一般情况下是不可能完全相同的。盲源分离的目的是求得源信号的最佳估计,盲辨识的目的是求得传输通道的。这个技术的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点,因为语音中含有很长的静音,也就是把静音和实际语音分离开来,因为是语音数据的原始处理,所以VAD是语音信号处理过程的关键技术之一。呈现出与会者清晰的声音。

u013250861的博客 1034

Flask-SQLAlchemy:在Flask应用中优雅地操作数据库

SQLAlchemy是一个强大的Python SQL工具包,它提供了一套完整的企业级持久化模式,用于将数据库操作抽象为Python代码。它允许我们使用面向对象的方式来操作数据库,而不必编写繁琐的SQL语句。SQLAlchemy支持多种数据库,包括MySQL、PostgreSQL、SQLite等,这使得我们在切换数据库时只需修改少量配置,而无需更改大量的代码。在Flask-SQLAlchemy中,我们使用Python类来定义数据库表的结构,这些类被称为模型类。

zhangkexin_z的博客 4869

31、工程中不确定性量化与优化的全面解析

本文全面解析了工程中不确定性量化与优化的关键方法。针对数据充足与不足两种情况,分别介绍了概率理论和非概率方法在不确定性建模中的应用;系统阐述了采样方法、FORM/SORM、泰勒级数近似等不确定性传播技术;深入比较了RBDO与RDO两种主流优化框架的原理、步骤及适用场景,并通过两杆桁架案例展示了具体实现过程。文章旨在为工程师提供一套完整的从不确定性分析到优化设计的方法论,提升工程系统的可靠性与稳健性。

php55的博客 121

黑猫带你学eMMC协议第12篇:生产状态感知(PSA)

1 概述 1.1 什么是PSA Production State Awareness (PSA) 生产状态感知 e•MMC设备可以利用其是否在生产环境中的信息,从而在现场运作时进行不同的操作。 例如,在设备低温焊接(soldering)前,将数据写入emmc,可能导致数据出错,而正在焊接期间写入数据,出错的概率可能会更大。在低温焊接之前,emmc设备可以使用一种特定的内部操作去加载内容,这样就能减少数据出错的概率,而在低温焊接后进行常规的操作就行了。 1.2 psa如何进行工作? PSA存在于emmc5.0

黑猫奥利奥的博客 4260

Flask-SQLAlchemy_数据库配置

SQLAlchemy是 Python 生态中最具影响力的 ORM(对象关系映射)库,其设计理念强调 “框架无关性”,支持在各类 Python 项目中独立使用,包括 Flask、Django 等 Web 框架,以及脚本工具、数据处理程序等。作为SQLAlchemy这种分层设计使开发者既能享受 SQLAlchemy 的强大功能,又能遵循 Flask 的开发范式。

人非生而知之者 1928

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Flask如何连接MySQL数据库?

详细介绍flask如何从配置数据库到连接数据库的详细步骤~

小陈从不熬夜 2820

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Flask-SQLAlchemy使用

flask用于orm操作表,一般使用flask- sqlalchemy 操作简单一般使用flask-sqlalchemy 2.5.1。

m0_58697892的博客 1556

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SQLAlchemy长时间未请求数据库连接断开--SQLALCHEMY_POOL_RECYCLE

这里写自定义目录标题环境:Python3.6 + Flask + Flask-SQLAlchemy + Mysql问题:前天部署在阿里云服务器上的项目运行正常,昨天早上发现所有接口的数据库请求都捕获到异常,重启项目恢复正常,今天早上又发现了同样的问题,初步判断数据库连接失败。总结:当较长时间没有去访问网站,再次打开时就会报一个数据库连接失败的错误。本篇博客记录这个问题的原因与解决办法。分析:连接池...

qxq-xq的博客 1万+

Python SQLAlchemy 如何与 Flask 集成

SQLAlchemy 是 Python 中最流行的 ORM 库之一,它能够让开发者通过编写 Python 代码,而不是直接编写 SQL 语句来操作数据库。SQLAlchemy 的核心概念是通过模型类来表示数据库表,使用 Python 的对象来操作数据库中的记录。虽然 SQLAlchemy 本身可以独立于 Flask 使用,但为了与 Flask 更好地集成,社区提供了一个扩展库,这个扩展封装了 SQLAlchemy,简化了它在 Flask 中的配置和使用,使得 Flask 应用更容易与数据库交互。在。

chusheng1840的博客 1260

sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库

Python+Flask安装:https://www.jianshu.com/p/cd1925e90edaFlask路径参数以及请求参数讲解:https://www.jianshu.com/p/54057b4f0437首先安装pymysql,命令如下:pip install pymysql安装过程中看到成功就可以。可以看到我的pymysql版本为0.9.3pymysql是安装flask_sqlal...

weixin_42310347的博客 782

flask-sqlalchemy mysql_Flask用Flask-SQLAlchemy连接MySQL

pip3 install Flask-SQLAlchemy测试环境目录结构配置settings.pyDIALECT = 'mysql'DRIVER = 'pymysql'USERNAME = 'root'PASSWORD = '808069'HOST = '127.0.0.1'PORT = '3306'DATABASE = 'cms'SQLALCHEMY_DATABASE_URI = '{}+{}...

weixin_42217306的博客 253

python Flask框架 用户管理系统-练习项目

后端:Flask + SQLAlchemy + MySQL提供稳定的API服务前端:Bootstrap + 原生JavaScript提供现代化的用户界面安全:bcrypt + 输入验证 + XSS防护确保系统安全开发:模块化设计 + 错误处理 + 性能监控提高开发质量用户体验:响应式设计 + 实时反馈 + 友好交互这是一个非常适合学习和实际应用的Flask项目范例,涵盖了Web开发的各个方面。# 导入必要的模块。

m0_71071763的博客 874

Flask 之 SQLAlchemy

SQLAlchemy 是 Python 下非常好的 ORM 框架,支持使用 MySQL、PostgreSQL、SQLite 等主流数据库。Flask-SQLAlchemy 基于 SQLAlchemy 对 Flask 进行了适配,使其在 Flask 下的使用变得简单。

一蓑烟雨任平生 2416

【flask连接一个或多个数据库】

Flask项目一般结合SQLAlchemy库建立与数据库的连接,并进行添加、修改、删除和查找等与数据库相关的操作。以PostgreSQL数据库为例,接下来会介绍flask项目连接单个和多个数据库的方法。# 定义Student模型"""学生表模型,数据库中学生表有多少字段,该模型就对应多少属性"""# 对应数据库中student这张表# 主键# 姓名# … 其他属性关于 flask-sqlalchemy 的模型属性类型(Integer、String等)可参考其他博客。

weixin_48277761的博客 2646
上一篇: flask 模拟简单的登录功能(2)
下一篇: Flask-Login 实现用户认证
敲代码的猫
博客等级 码龄10年 70粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值