Flask学习笔记 - 数据库

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

Flask 数据库操作

Flask 提供了多种方式来与数据库进行交互,包括直接使用 SQL 和利用 ORM(对象关系映射)工具,如 SQLAlchemy。

  1. 使用SQLAlchemy
  2. 创建和管理数据库:使用 db.create_all() 创建表。
  3. CRUD 操作:添加、读取、更新和删除记录。
  4. 查询操作:执行基本和复杂查询,包括排序和分页。
  5. Flask-Migrate:使用 Flask-Migrate 管理数据库迁移。
  6. 执行原始 SQL:使用原始 SQL 语句进行数据库操作。

使用SQLAlchemy

SQLAlchemy 是一个强大的 ORM 库,可以简化数据库操作,通过 Python 对象与数据库表进行交互。

Flask-SQLAlchemy 是 Flask 的一个扩展,用于集成 SQLAlchemy。

pip install flask-sqlalchemy

创建和管理数据库

模型是数据库表的 Python 类,每个模型类代表数据库中的一张表。

app.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import sys

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# OMR
class User(db.Model):
    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}>'

@app.route('/')
def index():
    return 'Hello, World!'
    
@app.route('/table')
def table():
    # 检查是否数据库是否已经有对应的数据表
    result = ""
    connection = db.engine.connect()
    if not db.engine.dialect.has_table(connection, 'user'):
        with app.app_context():
            db.create_all()
            result = "Table 'user' created successfully."
    else:
        result = "Table 'user' already exists."
    connection.close()
    return result

if __name__ == '__main__':
    port = sys.argv[1] if len(sys.argv) > 1 else 5001
    app.run(port=int(port),debug=True)

启动服务 python Flask/06/app.py

发现../..会创建一个instance目录,用浏览器访问table路径,第一次会显示

01.png

02.png

Table 'user' created successfully.

后面刷新会显示

Table 'user' already exists.

03.png

然后在instance目录下会生成mydatabase.db的文件

04.png

用终端打开该文件,.tables确认数据库中有user表,.schema users显示表结构与代码中的设置能匹配

05.png

基本的CURD操作

创建记录
@app.route('/add_user')
def add_user():
    new_user = User(username='john_doe', email='john@example.com')
    db.session.add(new_user)
    db.session.commit()
    return 'User added!'

会报错,修改app.py

new_user = User()
new_user.username = username
new_user.email = email

06.png

读取记录
@app.route('/get_users')
def get_users():
    users = User.query.all()  # 获取所有用户
    return '<br>'.join([f'{user.username} ({user.email})' for user in users])

User.query.all():查询所有用户记录。

07.png

更新记录
@app.route('/update_user/<int:user_id>')
def update_user(user_id):
    user = User.query.get(user_id)
    if user:
        user.username = '新名字'
        db.session.commit()
        return 'User updated!'
    return 'User not found!'

User.query.get(user_id):通过主键查询单个用户记录。

更新字段值并提交事务。

08.png

删除记录
@app.route('/delete_user/<int:user_id>')
def delete_user(user_id):
    user = User.query.get(user_id)
    if user:
        db.session.delete(user)
        db.session.commit()
        return 'User deleted!'
    return 'User not found!'

先输入个错误的2
09.png

输入正确的id,1

10.png

删除成功, 检查数据库表也删除了

恢复数据多添加几个User数据,报错了

IntegrityError
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: user.email
[SQL: INSERT INTO user (username, email) VALUES (?, ?)]
[parameters: ('john_doe', 'john@example.com')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)

因为原来添加时都加了 unique 唯一性的键

username = db.Column(db.String(80), unique=True, nullable=False)    
email = db.Column(db.String(120), unique=True, nullable=False)

app.py 加个时间戳

...
import time
...
@app.route('/add_user')
def add_user():
    timestamp = time.time()
    username = f'john_doe_{timestamp}'
    email = f'john_{timestamp}@example.com'
    new_user = User(username=username, email=email)
    db.session.add(new_user)
    db.session.commit()
    return 'User added!'
查询操作

SQLAlchemy 提供了丰富的查询功能,可以通过查询对象来执行各种查询操作。

app.py 查询操作

@app.route('/query/<username>')
def query(username):
    print(f"username: {username}")
    user = User.query.filter_by(username=username).first()
    if user:
        return f"User:{user.username} ({user.email})"
    return 'User not found!'

app.py 复杂查询

...
from sqlalchemy import or_
...

@app.route('/query2/<username>/<email>')
def query2(username,email):
    print(f"username: {username}")
    print(f"email: {email}")
    user = User.query.filter(or_(User.username == username, User.email == email)).first()
    if user:
        return f"User:{user.username} ({user.email})"
    return 'User not found!'

11.png

12.png

app.py 排序与分页

@app.route('/query3')
def query3():
    users = User.query.order_by(User.username).paginate(page=1, per_page=10)
    if users:
        return '<br>'.join([f'{user.username} ({user.email})' for user in users.items])
    return 'Users not found!'

13.png

使用 Flask-Migrate 进行迁移

Flask-Migrate 是一个用于数据库迁移的扩展,基于 Alembic,可以帮助你管理数据库的版本控制。

pip install flask-migrate
# 或pip3 install flask-migrate

配置 Flask-Migrate

app.py

from flask_migrate import Migrate

migrate = Migrate(app, db)

初始化迁移

flask db init

在app.py同级的终端目录下执行该命令

会生成migrations目录

截屏2025-04-05 17.01.39.png

创建迁移脚本

flask db migrate -m "Initial migration."

应用完成后,生成的DB文件

截屏2025-04-05 17.15.07.png

表结构有的,但是数据是没有的,要重新导数据?

执行原始SQL

...
from sqlalchemy import text
...

@app.route('/raw_sql')
def raw_sql():
    result = db.session.execute(text('SELECT * FROM user'))
    return '<br>'.join([str(row) for row in result])

db.session.execute():执行原始 SQL 查询。里面的SQL语句要加text 包装下

参考

  1. Flask数据库操作
Flask学习笔记-Flask-Migrate实现数据库迁移 > 我把它总的分为4步走分别是:<code>安装、配置、创建(仓库、脚本)、更新</code>如下 # Flask-Migrate实现数据库迁移 我把它总的分为4步走分别是:安装、配置、创建(仓库、脚本)、更新如下 Flask-Migrate实现数据库迁... 阅读详情

相关推荐

ZYNQ Linux 应用层 利用 AXI DMA 进行数据传输

ZYNQ Linux应用层 利用 AXI DMA 进行数据传输 软件版本: VIVADO2018.2 操作系统: Debian 9 硬件平台: ZYNQ-MZ7100FA 嵌入式操作系统:Debian(4.19.0-xilinx) AXI-DMA驱动:GitHub:bperez77/xilinx_axidma 一、搭建硬件环境 参见:《ZYNQ 修炼秘籍裸机篇 2019 版》第21章:CH21 利用 AXI DMA 进行批量数据环路测试 参考文章: ZYNQ跑系统 系列(四) AXI-DMA的linux下运

jin787730090的博客 1万+

flask-sqlalchemy扩展

1. 基本使用 1.1 扩展介绍 1.1.1 认识flask-sqlalchemy Flask-SQLAlchemy是一个为Flask应用增加***SQLAlchemy***支持的扩展。它致力于简化在Flask中***SQLAlchemy***的使用 SQLAlchemy***是目前python最强大的***ORM框架,功能全面,使用简单 ORM优缺点 优点 有语法提示,省去自己拼写SQL,保证语法的正确性 orm提供方言功能(dialect,可以转化为多种数据库的语法),减少学习成本 面向对象,可

weixin_46072106的博客 1978

SAP HR模块配置假期日历和缺勤类型

SAP的HR模块。业务顾问在实施时一般会配置未来10年的假期日历,到期后再进行配置。同时,增加请假类型(缺勤信息类型)。记录这一过程。

福来阁86号技师的妖孽日常 5522

【Flask】SQLAlchemy

本专栏介绍了SQLAlchemy库在flask上的orm操作

al6nlee的博客 7781

软件工程大作业——图书管理系统/图书个性化推荐与实现系统

软件工程期末大作业,图书管理系统,包含ER图、程序流程图、属性图、结构图

2401_82857325的博客 3646

深入解析ffmpeg编码错误:avcodec_send_frame()返回-22的排查与修复

本文深入解析FFmpeg编码中avcodec_send_frame()返回-22(AVERROR(EINVAL))错误的根本原因与系统排查方法。核心问题通常在于编码器未正确打开或上下文传递错误。文章提供了从检查编码器查找、确认avcodec_open2()调用,到验证上下文传递的完整修复指南,并附有可运行的代码示例,帮助开发者快速定位并解决这一常见编码障碍。

weixin_28049429的博客 389

Flask-数据库

Flask使用数据库的简单介绍

bambkk的博客 2961

【FPGA】定点数运算中的位宽优化与截取策略

本文深入探讨了FPGA定点数运算中的核心挑战——数据位宽优化与截取策略。针对定点数在加法、乘法等运算中位宽膨胀的问题,文章详细分析了位宽变化规律,并对比了直接截断、四舍五入和收敛舍入三大截取策略的优缺点及硬件实现方法。通过实战指南与避坑经验,旨在帮助开发者在保证计算精度的同时,高效利用FPGA资源,实现性能与面积的平衡。

weixin_29181861的博客 115

Python(Web时代)—— Flask的数据库操作

SQLAlchamy 是 Python 中一个通过 ORM 操作数据库的框架 SQLAlchemy(对象关系映射器)提供了一种方法,用于将用户定义的Python类与数据库表相关联,并将这些类(对象)的实例与其对应表中的行相关联。

qq_25702235的博客 2115

从零构建:如何在VSCode中为HBuilderX迁移的UniApp项目搭建TypeScript支持环境

本文详细指导如何将HBuilderX中的UniApp项目迁移至VSCode并搭建TypeScript支持环境。通过pnpm包管理器初始化项目、配置tsconfig.json和vite.config.ts文件,实现工程化迁移与TypeScript深度集成,提升开发效率和代码质量。

book8的博客 1050

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 339

Flask学习笔记(四): Flask与数据库连接

Flask学习笔记(四): Flask与数据库连接 前言 前面我们学习了Flask如何构建一个程序的流程,又研究了它的路由如何设定,还对如何获取模板表单数据进行了梳理,值得一提的就是Flask和SQLAlchemy的对接做得比较好,接下来将研究一下如何将Flask与数据库连接。 创建数据库 在系统中安装mysql数据库,通过root帐号进入数据库中,创建新的数据库studentinfo: create database studentinfo default character set utf

weixin_47861423的博客 4820

【RT-DETR涨点改进】独家Conv改进篇 | 来自TIP 2024顶刊| 引入 DEConv细节增强卷积模块, 能够恢复更多细节信息,提升小目标检测精度、含多种不同模型改进点

本文提出了一种细节增强卷积(DEConv)模块,通过融合多种差异卷积(CDC、ADC、HDC、VDC)来增强图像特征表示能力,特别在边缘和纹理细节提取方面表现突出。该模块采用重参数化技术,在不增加计算成本的情况下,将先验信息融入常规卷积层,显著提升了RT-DETR模型在模糊或遮挡场景下的目标检测精度。实验验证了DEConv在多种骨干网络(ResNet18/50、HGNet等)中的有效性,为实时目标检测系统提供了轻量高效的改进方案。

Ai缝合怪、助力小伙伴高效发论文 449

Python学习笔记——Flask数据库

目录 4.1 数据库的设置 4.2 数据库基本操作 将数据添加到会话中示例: 在视图函数中定义模型类 常用的SQLAlchemy查询过滤器 常用的SQLAlchemy查询执行器 创建表: 删除表 插入一条数据 一次插入多条数据 查询:filter_by精确查询 first()返回查询到的第一个对象 all()返回查询到的所有对象 filter模糊查询,返回名字结尾字符为...

唯恋殊雨的博客 8520

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Flask学习笔记五】使用数据库

SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 安装 pip install flask-sqlalchemy 如果是mysql数据库,需要安装: pip install flask-mysqldb or pip install pymysql 数据库连接设置 ...

1003 228

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Flask学习笔记2--数据库

通过 ORM(对象关系映射)将 Python 类映射到数据库表,避免直接写 SQL 语句。pymysqlMySQLdb如果sqlalchemy连接的是 mysql /MariaDB数据库,需要安装 mysqldb(性能高) 或pymysql(跨平台友好)驱动。安装 flask-mysqldb需先安装系统依赖。

2301_79861685的博客 2161

Flask学习笔记:数据库

1. 做好准备工作进入项目主目录激活虚拟环境2. 安装Flask-SQLAlchemyFlask-SQLAlchemy拓展为SQLAlchemy提供了一层包装,也就是对象关系映射(ORM)。ORM允许应用通过类,对象和方法来管理数据库而不是表和SQL。ORM的工作就是将高级操作转换为数据库命令。输入以下命令安装Flask-SQLAlchemy:(venv) $ pip install flask-...

博客 718

【一周掌握Flask框架学习笔记】Flask中使用数据库(使用Flask-SQLAlchemy管理数据库)

Flask中使用数据库 Flask-SQLAlchemy扩展 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。 安装 flask-sqlalchemy pip install flask-sqlalch

码农-Vax天道的时间宝藏 2984

Python Flask学习笔记之数据库

使用Flask-SQLAlchemy管理数据库# Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一个很强大的关系型数据库框架,支持包含MySQL、PostgreSQL和SQLite在内的很多数据库软件。

plumlee的专栏 574

《Flask Web Development》学习笔记---chapter5 Database

1.分析各种数据库,Relational databases 和 NoSQL

u011515122的专栏 1080

flask 数据库部分学习笔记

class Config(object): #连接数据库的信息,# url的格式为:数据库的协议://用户名:密码@ip地址:端口号(默认可以不写)/数据库名 SQLALCHEMY_DATABASE_URI = “mysql+pymysql://root:123456@127.0.0.1:3306/flaskfive” 动态追踪数据库的修改. SQLALCHEMY_TRACK_MODIFIC...

qq_39419821的博客 213

flask 学习笔记之数据库

5.1 SQL数据库 数据库的基本概念-------------------略。 5.2 NoSQL数据库 数据库的基本概念-------------------略。 5.3 使用SQL还是NoSQL 略。 5.4 Python数据库框架 选择数据库框架时,你要考虑很多因素。 易用性、性能、可移植性、Flask集成度。 5.5 使用Flask-SQLAlchemy管理数据库 Flask-SQLAl...

ghjcduhvfyjhbf的博客 254

Flask学习笔记之数据库

### Mac和Windows下数据库的安装: 1. Mysql为例 2. https://dev.mysql.com/downloads/mysql/ 3. Mac上安装Mysql很简单,直接一顿下一步安装就可以了。 4. 设置初始化密码的命令是:    ```    mysqladmin -uroot password [password]    ``` 5. windows:

梦想还是要有的 779

小福利,flask框架学习笔记(11)--Flask数据库迁移

大家好,我是天空之城,今天带来小福利,flask框架学习笔记(11)–Flask数据库 flask数据库的运用 项目总图 首先通过cmd窗口进入到项目所在文件夹, 创建虚拟环境pipenv shell(要先安装pip install pipenv包) 执行flask数据库迁移的三个步骤 python manage.py db init初始化 python manage.py db migrate python manage.py db upgrade 最后可以查看到数据库里创建了User表格 manag

littlespider889的博客 271

小福利,flask框架学习笔记(7)--Flask数据库

大家好我是天空之城,今天给大家带来小福利,flask框架学习笔记(5)–Flask数据库 数据库的连接 from flask import Flask from sqlalchemy import create_engine # 连接数据库 # 地址 HOSTNAME = '127.0.0.1' # 数据库 # 几栋 DATABASE = 'classes' # 端口 # 门牌号 PORT = 3306 # 用户名和密码 # 钥匙 USERNAME = 'root' PASSWORD = 'root'

littlespider889的博客 354
上一篇: Flask学习笔记 - 表单
下一篇: Vue学习笔记 - 安装与环境搭建
忘川三
博客等级 码龄12年 208粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值