• Flask入门之触发器,事件,数据迁移


    SQLAlchemy Core和SQLAlchemy ORM都具有各种各样的事件挂钩:

    核心事件 - 这些在 Core Events中描述,并包括特定于连接池生命周期,SQL语句执行,事务生命周期以及模式创建和拆卸的事件挂钩。

    ORM事件 - 这些在 ORM事件中描述,并且包括特定于类和属性检测,对象初始化钩子,变更钩子,会话状态,刷新和提交钩子,映射器初始化,对象/结果人口和每个事件的事件钩子 - 持久性钩。

    二、事件

    SQLAlchemy Core和SQLAlchemy ORM都具有各种各样的事件挂钩:

    1. 核心事件 - 这些在 Core Events中描述,并包括特定于连接池生命周期,SQL语句执行,事务生命周期以及模式创建和拆卸的事件挂钩。

    2. ORM事件 - 这些在 ORM事件中描述,并且包括特定于类和属性检测,对象初始化钩子,变更钩子,会话状态,刷新和提交钩子,映射器初始化,对象/结果人口和每个事件的事件钩子 - 持久性钩。

    事件角色预设

    #models.py 红色为新增

    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String, nullable=True)
        users = db.relationship('User', backref='role')
    
        @staticmethod
        def seed():
            db.session.add_all(map(lambda r:Role(name=r),['Guests','Administrators']))

    监听事件的注册与处理的函数

    #models.py 红色为新增

    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String, nullable=True)
        password = db.Column(db.String, nullable=True)
        role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))
    
        @staticmethod
        def on_created(target,value,initiator):
            target.role=Role.query.filter_by(name='Guests').first()
    
    
    db.event.listen(User.name,'set',User.on_created)
    
    # listen事件就与on_created这个方法绑定起来

    当User新增记录时,调用User.on_created()

    三、Flask-Migrate

      当我们到新机子使用时,就要用到数据迁移

      1. 安装

    pip install flask-migrate==1.5.0

      2. 导入库

    #manager.py 红色为新增

    from app import create_app,db
    from flask_migrate import Migrate,MigrateCommand

      3. 实例化

    migrate=Migrate(app,db)
    manager.add_command('db',MigrateCommand)

      4. 数据库初始化(命令行执行)

    python manager.py db init

    执行完毕后,会在根目录生成一个 migrations 文件夹

      5. 开始迁移工作

    python manager.py db migrate

    执行完后,会在 migrations/versions 下生成一个py文件

    这个文件里,有两个方法,upgrade()和downgrade()

  • 相关阅读:
    注册表清理bat
    apache2.2.14 负载均衡过程中遇到问题记录;
    thikpad 中eclipse/idea 无法获取鼠标
    PLSQL DEVELOPER 提示(错误)信息是乱码;亲测有效
    windows右键 打开方式 浏览 无法添加默认打开方式 解决
    澳洲值得代购物品汇总
    5 open source dashboard tools for visualizing data
    nginx概述
    Linux bash 参数处理办法
    Linux shell 启动配置文件设置
  • 原文地址:https://www.cnblogs.com/wongbingming/p/6833407.html
Copyright © 2020-2023  润新知