【Flask框架】——28 Flask_SQLAlchemy
创始人
2024-05-02 08:37:21
0

在这里插入图片描述

在这里插入图片描述


Flask-SQLAlchemy

Flask-SQLAlchemy的使用对SQLAlchemy进行了封装和优化:

  • Flask-SQLAlchemy是Flask框架的一个插件;

  • Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装的一个插件,使得我们在Flask中使用sqlalchemy更加的简单。

1.安装

pip install flask-sqlalchemy

2.Flask-SQLAlchemy的使用要点

2.1 数据库连接

数据库初始化不再是通过create_engine

1.跟sqlalchemy一样,定义好数据库连接字符串DB_URI

HOSTNAME = 'localhost'
PORT = '3306'
DATABASE = 'flask_db'
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

2.将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI 这个key名配置到 app.config中。

# 把连接数据库参数设置到 app中
app.config['SQLALCHEMY_DATABASE_URL'] = DB_URL

3.使用 flask_sqlalchemy.SQLAlchemy 这个类定义一个对象,并将 app 传入进去。

db = SQLAlchemy(app)

2.2 创建ORM模型类

之前都是通过Base = declarative_base()来初始化一个基类,然后再继承,在Flask-SQLAlchemy中更加简单了。

1.还是跟使用sqlalchemy一样,定义模型。现在不再是需要使用 delarative_base 来创建一个基类。而是使用db.Model 来作为基类。

2.在模型类中, Column 、 String 、 Integer 以及 relationship 等,都不需要导入了,直接使用 db 下面相应的属性名就可以了。

3.在定义模型的时候,可以不写 __tablename__ ,那么 flask_sqlalchemy 会默认使用当前的模型的名字转换成小写来作为表的名字,并且如果这个模型的名字用到了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接,虽然flask_sqlalchemy给我们提供了这个特性,但是不推荐使用。(增强代码可读性,提高团队合作效率)

# 2.创建模型类User
class User(db.Model):__tablename__ = 't_user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(50))pwd = db.Column(db.String(50))def __repr__(self):return 'User:'.format(self.name, self.pwd, self.id)

2.3 将ORM模型映射到数据库表

写完模型类后,要将模型映射到数据库的表中,使用以下代码即可

  1. 删除数据库表:db.drop_all()

  2. 创建数据库表:db.create_all()

2.4 session的使用

以后session也不需要使用 sessionmaker 来创建了,直接使用 db.session 就可以了,操作这个session的时候就跟之前的 sqlalchemy 的 session 是一样的。

2.5 添加数据

这时候就可以在数据库中看到已经生成了对应表了。

添加数据和之前的没有区别,只是session成为了一个db的属性

2.6 查询数据:

1.单表查询
查询数据不再是之前的session.query方法了,而是将query属性放在了db.Model上,所以查询就是通过“模型名.query”的方式进行查询了, query 就跟之前的sqlalchemy中的query方法是一样用的。

2.多表查询
如果查找数据涉及多个模型,只能使用db.session.query(模型名).all() 这种方式。

2.7 修改数据:

修改数据和之前的没有区别,只是session成为了一个db的属性。

2.8 删除数据:

删除数据跟添加数据和修改数据类似,只不过session是db的一个属性而已。

from flask import *
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)# 数据库的配置变量
USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = 'localhost'
PORT = '3306'
DATABASE = 'flask_db'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)# 把连接数据库参数设置到 app中
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI# 1.创建数据库连接
db = SQLAlchemy(app)# 2.创建模型类User
class User(db.Model):__tablename__ = 't_user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(50))pwd = db.Column(db.String(50))def __repr__(self):return 'User:'.format(self.name, self.pwd, self.id)# 3.创建数据库表
# db.drop_all()
# db.create_all()@app.route('/')
def index():  # put application's code herereturn render_template('index.html')@app.route('/add')
def add():  # 增加name = request.args.get('name')pwd = request.args.get('pwd')# 将数据插入t_user表中user = User(name=name, pwd=pwd)db.session.add(user)db.session.commit()return "添加数据成功"@app.route('/query')
def query():id = request.args.get('id')user = db.session.query(User).filter(User.id == id).first()print('查询成功,查到的用户名是:{},密码是:{},id是:{}'.format(user.name, user.pwd, user.id))return '查询成功,查到的用户名是:{},密码是:{},id是:{}'.format(user.name, user.pwd, user.id)@app.route('/update')
def update():pass@app.route('/delete')
def delete():name = request.args.get('name')user = User.query.filter(User.name == name).first()db.session.delete(user)db.session.commit()return "删除用户:{}成功".format(user.name)if __name__ == '__main__':app.run(host='0.0.0.0', port=8888, debug=True)

index.html



测试flask的sqlalchemy


新增操作
查询操作
修改操作
删除操作

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...