这篇教程Flask 数据库集成的介绍写得很实用,希望能帮到您。 前言: 数据库是大多数 Web 应用的基础设施,只要想把数据存储下来,就离不开数据库,下面将一起学习一下如何给 Flask 应用添加数据库支持。
1、使用Flask-SQLAlchemy管理数据库Flask-SQLAlchemy 集成了 SQLAlchemy ,它简化了连接数据库服务器、管理数据库及操作会话等各类工作,让 Flask 更方便的进行数据存储及处理,我们不必过多关心原生 SQL 语句,只需要使用 Python 类就可以轻松的完成对数据库表的增删改查操作,并且该插件还支持多种数据库类型,如MySQL 、PostgreSQL 、和SQLite 等。
我们可以使用pip install flask-sqlalchemy 进行安装。
1.1 配置Flask_SQLAlchemy下面以 SQLite 数据库为例,Flask-SQLAlchemy 数据库的 url 通过配置变量SQLALCHEMY_DATABASE_URI 指定,通过 Flask-SQLAlchemy 提供的 SQLAlchemy 类传入 Flask 的实例 app,创建 db 实例,表示程序使用的数据库,这个 db 对象能够使用 Flask-SQLAlchemy 的所有功能。 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)basedir = os.path.abspath(app.root_path)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app) 其中,SQLALCHEMY_TRACK_ MODIFICATIONS 配置变量表示是否追踪对象的修改,在此设为False 。
1.2 定义数据库模型所谓数据模型,就是用来映射数据库表的 Python 类,一个数据模型类对应数据库中的一个表,类的属性代表数据库表的字段。所有的模型类都需要继承 Flask-SQLAlchemy 提供db.Model 基类。 新建model.py文件,定义User类如下: from app import dbclass User(db.Model): id = db.Column(db.Integer, primary_key=True) user_name = db.Column(db.String) password = db.Column(db.String)
1.3 创建数据库和表运行 Flask 应用,然后在终端中输入flask shell 命令,进入 Python 交互环境 如下所示: >>> from app import db # 从app.py中导入db实例>>> from model import * # 从model.py中导入所有模型类>>> db.create_all() # 用db.create_all()创建数据库表 执行完之后,会在项目根目录生成一个data.db 库文件。 注意: 数据库和表一旦创建后,之后对模型类的改动不会自动作用到实际的表中,比如,在模型类中添加或删除字段,修改字段的名称和类型,再次调用db.create_all() 不会重新创建表或是更新表,只有通过db.drop_all() 删除数据库中所有的表之后再调用db.create_all() 才能重新创建表, 那么就会出现这么一个问题: 这样操作的话,数据库表被删除重建了,那表中原有的数据也都没有了,这肯定是不行的,这时就出现了数据库迁移的概念,先留个坑,下篇文章介绍。
1.4 数据库操作现在我们创建了模型,也生成了数据库和表,接下来就来学习一下常用的数据库操作。数据库操作主要是CRUD (Create 创建、Read 读取/查询、 Update 更新、Delete 删除)。
1.4.1 Create添加一条记录到数据库中,主要分为以下三步: - 使用
Python 模型类创建对象作为一条记录 - 添加新创建的对象到数据库会话中
- 提交数据库会话
如下,在上面的交互环境下,创建一个新用户: >>> from app import db # 从app.py中导入db实例>>> from model import User # 导入模型类User>>> user1=User(user_name='tigeriaf', password='123456') # 创建用户1>>> user2=User(user_name='admin', password='123456') # 创建用户2# 添加新创建的对象到数据库会话中>>> db.session.add(user1)>>> db.session.add(user2)# 将数据库会话提交,数据写入data.db文件>>> db.session.commit()# 测试>>> print(user1.id)1>>> print(user2.id)2 
另外,除了依次调用add() 方法添加记录,也可以使用add_all() 一次添加包含多个模型类对象的列表。
1.4.2 Read使用模型类 提供的 query 属性 通过模型类提供的 query 属性附加调用各种过滤方法可以查询数据库表的数据, 查询模式如下: <模型类>.query.<过滤方法>.<查询方法>
从某个模型类出发,通过在 query 属性对应的 Query 对象上附加的过滤方法和查询函数对模型类对应的表中的记 进行各种筛选等,最终返回包含对应数据库记录数据的模型类实例,对返回的实例调用属性即可获取对应的字段数据。 # 查询全部>>> User.query.all()[<User 1>, <User 2>]# 查询指定id的记录>>> user1=User.query.get(1)>>> user1.user_name'tigeriaf'# 查询条数>>> User.query.count()2# 查询user_name为admin的用户>>> User.query.filter_by(user_name='admin').all()[<User 2>] SQLAlcherny 提供了很多过滤方法,使用这些过滤方法可以获取更精确的查询,这里就不展开了。 完整的查询、过滤方法可以查看:The Query Object 。
1.4.3 Update更新一条记录非常简单,直接给模型类的属性附上新的值,然后调用commit() 方法提交会话即可。 如下,修改 id 为 2 的用户的用户名 user_name 。 >>> user2=User.query.get(2)>>> user2.user_name'admin'>>> user2.user_name='张三'>>> db.session.commit()>>> user2.user_name'张三'
1.4.4 Delete使用delete()进行数据记录的删除,如下: >>> db.session.delete(user2)>>> db.session.commit()>>> user2=User.query.get(2)>>> print(user2)None
1.4.5 在视图函数里操作数据库在视图函数里操作数据库的方式在 Python Shell 交互环境下大致是相同的,无非就是多了从请求对象获取数据及验证数据的步骤, 如下一个案例: @app.route('/user', methods=['GET', 'POST'])def user(): if request.method == 'POST': user_name = request.form['user_name'] password = request.form['password'] user = User(user_name=user_name, password=password) db.session.add(user) db.session.commit() return 'user:{} add success! id:{}'.format(user_name, user.id) else: user_id = request.args.get('user_id') user = User.query.get(user_id) if user: return 'Hello user:{}!'.format(user.user_name) else: return 'failed' 上述代码中,视图函数 user 接受两种方式的请求,分别完成添加用户、查询用户的功能,将接收数据存储在数据库中。 发送请求测试如下: 
到此这篇关于 Flask 数据库集成的介绍的文章就介绍到这了,更多相关 Flask 数据库集成内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! Python+OpenCV 图像边缘检测四种实现方法 Pytorch-mlu |