网站建设包括哪些方面选择题,免费文案素材网站,网站建设硬件配置,山东网站实战Flask API项目指南之 数据库集成
本系列文章将带你深入探索实战Flask API项目指南#xff0c;通过跟随小菜的学习之旅#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧#xff01;
前言
在上一篇文章中#xff0c;我们实现了…
实战Flask API项目指南之 数据库集成
本系列文章将带你深入探索实战Flask API项目指南通过跟随小菜的学习之旅你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧
前言
在上一篇文章中我们实现了一个 图书馆里系统API的后端小菜觉得美中不足的是它使用一个 Python的列表用于存储图书的信息是一个 本地版图书管理系统后端API。重新启动程序图书的数据就会丢失了。所以这节我们将用上数据库来帮助小菜解决这一痛点实现持久化数据存储。
当小菜踏入Flask后端开发的世界时数据库是存储和管理数据的关键。
Flask并没有内置数据库功能但是提供了扩展机制可以方便地集成第三方数据库库。本文将介绍如何在 Flask 项目中集成SQLAlchemy这是一个流行的Python ORM库。 我们将会在上一节课的基础上改写让读者朋友们了解如何在 Flask应用中集成数据库。
注意本文直接直接上代码干货满满。 SQLAlchemy
1. 安装依赖
在Flask 中可以使用各种数据库如SQLite、MySQL、PostgreSQL等。首先需要安装所需的数据库驱动库例如flask-sqlalchemy用于集成 SQLAlchemy。
在使用 SQLAlchemy 进行数据库操作时大部分操作是相似的无论使用哪种数据库类型。(本文使用的是 MYSQL)
首先我们需要安装对应的依赖库使用以下命令。
pip install flask-sqlalchemy flask-mysqldb2. 配置数据库
在 Flask 应用中配置数据库连接信息。在应用的配置中添加数据库的连接字符串。
确保将username、password、localhost和flask替换为自己的MySQL数据库的用户名、密码、主机和数据库名称。
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp Flask(__name__)
# mysql示例
# app.config[SQLALCHEMY_DATABASE_URI] mysql://username:passwordlocalhost/database
app.config[SQLALCHEMY_DATABASE_URI] mysql://root:123456localhost/flaskdb SQLAlchemy(app)3. 定义数据模型
使用SQLAlchemy可以定义数据模型作为 Python 类。每个类对应一个表类的属性对应表中的列。数据模型是数据库中表格的抽象表示它定义了表格的结构和字段。
在下面代码中定义了一个名为Book的数据模型它有三列 book_id 字段作为主键用作主键primary key,唯一的不允许为空 title 字段表示书籍的标题字符串类型最大长度为100字符不允许为空 author 字段表示书籍的作者字符串类型最大长度为50字符不允许为空 因为在我们的案例中数据表只需要这三列。
class Book(db.Model):book_id db.Column(db.Integer, primary_keyTrue, uniqueTrue, nullableFalse)title db.Column(db.String(100), nullableFalse)author db.Column(db.String(50), nullableFalse)附上SQLAlchemy中常用的列设置选项
选项描述primary_keyTrue将列标记为主键用于唯一标识每行数据。nullableFalse指定列不允许为空值。uniqueTrue确保列中的值是唯一的不允许重复值。defaultvalue为列设置默认值如果插入数据时未提供值则使用默认值。indexTrue创建列的索引以提高检索性能。autoincrementTrue自动生成递增的值通常与主键一起使用。onupdatevalue在更新行时设置列的值为指定的值。server_defaultvalue设置列的服务器默认值通常在数据库层面实现。
4. 常用数据库操作
当使用SQLAlchemy时有许多常用的数据库操作方法用于执行CRUD创建、读取、更新、删除操作。以下是一些常用的SQLAlchemy操作方法示例
请注意这些示例假定你已经正确配置了SQLAlchemy和数据库连接。 创建数据Create # 创建一个新对象并将其添加到数据库中
new_book Book(titleSample Book, authorJohn Doe)
db.session.add(new_book)
db.session.commit()读取数据Read # 查询所有书籍
books Book.query.all()# 根据条件查询书籍
specific_book Book.query.filter_by(titleSample Book).first()更新数据Update # 查询要更新的对象
book_to_update Book.query.filter_by(titleSample Book).first()# 更新对象的属性
book_to_update.author New Author
db.session.commit()删除数据Delete # 查询要删除的对象
book_to_delete Book.query.filter_by(titleSample Book).first()# 从数据库中删除对象
db.session.delete(book_to_delete)
db.session.commit()过滤和排序Filter and Sort # 查询所有作者是John Doe的书籍
johns_books Book.query.filter_by(authorJohn Doe).all()# 查询前5本书籍并按书名升序排列
top_books Book.query.order_by(Book.title).limit(5).all()聚合和统计Aggregate and Count # 计算书籍总数
book_count Book.query.count()# 计算不同作者的书籍数量
author_book_count db.session.query(Book.author, db.func.count(Book.book_id)).group_by(Book.author).all()在SQLAlchemy中常用的操作及其描述
操作描述定义数据模型使用db.Model定义数据模型并定义字段及其属性。创建数据表使用db.create_all()创建定义的数据模型对应的数据表。查询数据使用db.session.query()创建查询对象并添加查询条件。插入数据使用db.session.add()添加新数据对象并提交更改。更新数据获取数据对象修改属性后使用db.session.commit()提交更改。删除数据使用db.session.delete()添加要删除的数据对象并提交更改。过滤条件在查询中使用filter、filter_by等方法添加过滤条件。排序使用order_by方法指定查询结果的排序方式。限制数量使用limit和offset限制查询结果的数量和偏移量。聚合和统计使用func函数进行聚合和统计操作如func.count()。关联表查询使用relationship定义关联关系使用join进行关联查询。事务管理使用db.session.begin()开始事务使用commit提交更改或rollback回滚更改。批量操作使用db.session.bulk_insert_mappings()进行批量插入使用db.session.bulk_update_mappings()进行批量更新。连接查询使用join进行多表连接查询使用select_from、outerjoin等方法进行不同类型的连接。原始SQL查询使用db.session.execute()执行原始的SQL查询。
5. 创建数据表
在app.py的末尾添加以下代码来创建数据表
在Flask-SQLAlchemy中可以使用db.create_all()来创建所有定义的数据模型对应的数据表。在app.py的末尾添加以下代码
db.create_all()但有时候会抛出一个 RuntimeError 的异常 提示说在应用程序上下文之外工作所以在前面添加 with app.app_context()如下所示
# 创建数据表
with app.app_context():db.create_all() # 或其他需要应用上下文的操作6. 持久化数据存储的图书管理系统
这里将会在上一节课 本地版图书管理系统 的基础上使用SQLAlchemy 改写成持久化数据存储的图书管理系统。
上代码
# -*- coding: utf-8 -*-from flask_sqlalchemy import SQLAlchemy
from flask import (Flask, jsonify, request)app Flask(__name__)
app.config[SQLALCHEMY_DATABASE_URI] mysql://root:123456localhost/flask # 替换为你的数据库 URI
app.config[SQLALCHEMY_TRACK_MODIFICATIONS] False
db SQLAlchemy(app)# 定义Book模型类
class Book(db.Model):book_id db.Column(db.Integer, primary_keyTrue, uniqueTrue, nullableFalse)title db.Column(db.String(100), nullableFalse)author db.Column(db.String(50), nullableFalse)# 获取所有书籍
app.route(/books, methods[GET])
def get_all_books():books Book.query.all()book_list [{id: book.book_id, title: book.title, author: book.author} for book in books]return jsonify(book_list), 200# 获取特定书籍
app.route(/books/int:book_id, methods[GET])
def get_book(book_id):book Book.query.get(book_id)if book:return jsonify({id: book.book_id, title: book.title, author: book.author}), 200return jsonify({error: Book not found.}), 404# 创建新书籍
app.route(/books, methods[POST])
def create_book():data request.jsonnew_book Book(titledata[title], authordata[author])db.session.add(new_book)db.session.commit()return jsonify({id: new_book.book_id, title: new_book.title, author: new_book.author}), 201# 更新书籍信息
app.route(/books/int:book_id, methods[PUT])
def update_book(book_id):book Book.query.get(book_id)if book:data request.jsonbook.title data[title]book.author data[author]db.session.commit()return jsonify({id: book.book_id, title: book.title, author: book.author}), 200return jsonify({error: Book not found.}), 404# 删除书籍
app.route(/books/int:book_id, methods[DELETE])
def delete_book(book_id):book Book.query.get(book_id)if book:db.session.delete(book)db.session.commit()return , 204return jsonify({error: Book not found.}), 404if __name__ __main__:app.run(debugTrue)
现在小菜可以使用GET、POST、PUT和DELETE请求来访问API端点并对图书数据进行操作。这个例子演示了如何在 Flask 应用中集成数据库、定义数据模型、执行数据库操作以及使用API端点来操作数据。这将帮助小菜更好地理解 Flask 中的数据库集成。
总结
这篇文章深入探讨了在Flask应用中集成数据库的关键步骤通过引入SQLAlchemy这一流行的Python ORM库实现了数据的持久化存储。文章首先介绍了安装依赖以及配置数据库的过程然细讲解了如何定义数据模型以及常见的数据库操作方法。重点强调了如何使用Flask-SQLAlchemy扩展来简化数据库交互的过程。
通过以上步骤小菜已经成功地在 Flask 应用中集成了MySQL数据库并实现了图书的增删改查等操作。小菜获得了以下知识
如何配置Flask应用以连接数据库。如何使用SQLAlchemy定义数据模型和表格结构。如何执行常见的数据库操作包括创建、读取、更新和删除数据。如何使用Flask-SQLAlchemy扩展简化数据库交互。
通过本文的学习小菜已经理解了Flask中数据库集成和操作这为后面小菜需要实现后端API平台打下了扎实的基础