• Flask-SQLAlchemy的基本使用


    1. 依赖

    pip install flask-sqlalchemy
    pip install flask-script
    pip install flask-migrate
    
    • 1
    • 2
    • 3

    2. 创建SQLAlchemy对象

    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234@localhost/sqlalchemy_test'  # 绑定数据库
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 跟踪对象的修改并发出信号但不发出警告
    db = SQLAlchemy(app)
    
    # 代码迁移配置
    manager = Manager(app)
    migrate = Migrate(app, db)
    manager.add_command('db', MigrateCommand)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3. 创建模型

    class User(db.Model):
        __tablename__ = "user_account"  # 数据库表名
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(30))
        fullname = db.Column(db.String(30))
        sex = db.Column(db.String(30))
    
        def __repr__(self):
            return f"User(id={self.id!r}, name={self.name!r}, fullname={self.fullname!r})"
    
    class Address(db.Model):
        __tablename__ = "address"
        id = db.Column(db.Integer, primary_key=True)
        email_address = db.Column(db.String(30), nullable=False)
        user_id = db.Column(db.Integer, db.ForeignKey("user_account.id"), nullable=False) # 定义外键约束
        # 定义关系模型,可通过backref反向取
        user = db.relationship('User', backref=db.backref('address', lazy=True), lazy=True)  
        def __repr__(self):
            return f"Address(id={self.id!r}, email_address={self.email_address!r})"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3.1 常见的数据类型

    Integer、String(size)、DateTime、Float、Boolean
    更多数据类型:https://docs.sqlalchemy.org/en/14/core/type_basics.html#generic-types

    3.2 db.Column 常见的配置选项

    primary_key:如果设为 True,这列就是表的主键
    unique:如果设为 True,这列不允许出现重复的值
    index:如果设为 True,为这列创建索引,提升查询效率
    nullable:如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
    default :为这列定义默认值
    更多配置选项:https://docs.sqlalchemy.org/en/14/core/metadata.html#sqlalchemy.schema.Column

    4.执行迁移

    # 创建迁移仓库--初始化
    python manage.py db init
    # 创建迁移脚本
    python manage.py db migrate
    # 更新数据库
    python manage.py db upgrade
    # 回退数据库
    python manage.py db downgrade 版本号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    每次数据库模型变化,需要重复使用migrate命令和upgrade命令(按顺序组合使用),使用成功后将修改版本号。

    5. 查询API

    User.query返回的是一个BaseQuery对象,该对象支持sqlalchemy的许多查询API

    5.1. 常用的过滤器

    filter() :把过滤器添加到原查询上,返回一个新查询
    filter_by() :把等值过滤器添加到原查询上,返回一个新查询
    limit():使用指定的值限制原查询返回的结果数量,返回一个新查询
    offset():偏移原查询返回的结果,返回一个新查询
    order_by():根据指定条件对原查询结果进行排序,返回一个新查询
    group_by():根据指定条件对原查询结果进行分组,返回一个新查询

    5.2 常用的查询执行函数

    all():以列表形式返回查询的所有结果
    first():返回查询的第一个结果,如果没有结果,则返回 None
    first_or_404():返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误响应
    get() :返回指定主键对应的行,如果没有对应的行,则返回 None
    get_or_404():返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误响应
    count():返回查询结果的数量
    paginate():返回一个 Paginate 对象,它包含指定范围内的结果

    更多查询API:https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=cte#sqlalchemy.orm.Query

  • 相关阅读:
    centos7 安装 qt5.14.2 以及 openssl 问题
    Oracle-数据完整性
    2022-2028全球及中国特殊黄铜棒行业研究及十四五规划分析报告
    synchronized 的实现原理以及锁升级详解
    数理统计的基本概念(二)
    Python(9)字典和集合
    【对比Java学Kotlin】协程-创建和取消
    vue3 code format bug
    写一点什么吧
    JVM(十三)—— 执行引擎
  • 原文地址:https://blog.csdn.net/weixin_47513022/article/details/125403913