Flask数据库

本文介绍了如何在Flask中配置和使用数据库,包括SQLAlchemy的数据库模型类、增删改查操作,以及数据库迁移。此外,还提到了Flask-Mail这个邮件扩展,用于在Flask应用中发送邮件。
摘要由CSDN通过智能技术生成

flask默认不支持数据库,可使用数据库扩展使其支持数据库(关系型、菲关系型),flask中一般使用SQLALchemy来操作数据库,类似于Django的orm,但更加通用

1. flask数据库配置

SQLAlchemy是一个关系型数据库框架,提供了高层的ORM和底层的原生数据库的操作,flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展

数据库配置:flask-sqlalchemy只能提供数据库操作,需要提前自己创建数据库分配权限
    - 1. 安装扩展:pip install falsk-sqlalchemy
        连接mysql数据库需要安装flask-mysqldb:pip install flask-mysqldb
    - 2. 数据库连接及配置:数据库连接通过URL指定,在app.config里面配置
        app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test3'
        app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True  # 设置每次请求结束后自动提交数据库中的改动(不建议使用)
        app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 设置数据模型类数据和数据库数据同步(当数据表数据变化,数据模型类属性值同步变化)
        app.config['SQLALCHEMY_ECHO'] = True  # 查询时会显示原始SQL语句

2. flask数据模型类

同Django相同我们需要定义数据模型类来表示使用的数据实体,数据模型类中的属性对应数据表中的字段
flask数据模型类不会自己添加主键字段,需要手动添加主键字段

数据模型类创建:数据模型类继承自db.Model类
    - 创建SQLAlchemy类实例对象用来操作数据库:db = SQLAlchemy(app)
    - 创建类属性,对应数据表中的字段
        - db.Column(name, type_, **args):字段名(默认为属性名)、字段类型、字段选项(数据表中的真实字段)
        - db.relationship("关联表对应的模型类", backref="反向引用属性名"):建立模型类之间的关联,该字段在数据表中非真实存在,只是方便查询
            backref:反向引用,在关联表中可使用该属性反向引用
    - 自定义对象显示形式:重写__repr__方法(Django中为__str__方法)
    - 自定义生成的数据表名:__tablename__ = "xxxx"(默认为类名小写下划线分割形式)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)


# 数据库配置
class DatabaseConfig(object):
    SQLALCHEMY_DATABASE_URI = "mysql://yuxi:199618@127.0.0.1:3306/test0"
    SQLALCHEMY_TRACK_MODIFICATIONS = True


app.config.from_object(DatabaseConfig)  # 导入数据库配置
db = SQLAlchemy(app)  # 创建数据库管理对象db


# 创建数据模型类
class Role(db.Model):
    """用户角色表:管理员/用户"""
    __tablename__ = "tb_roles"  # 自定义生成的表名

    id = db.Column(db.Integer, primary_key=True)  # 主键列,手动指定,默认自增
    name = db.Column(db.String(32), unique=True)
    users = db.relationship("User", backref="role")  # 创建关联关系:非真实字段只用于查询(backref:反向引用)

    def __repr__(self):
        # 自定义对象显示形式
        return self.name


class User(db.Model):
    """用户表"""
    __tablename__ = "tb_users"

    id = db.Column(db.Integer
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值