码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-10 01:05:02      阅读:975      评论:0      收藏:0      [点我收藏+]

标签:ons   pass   downgrade   img   session   and   语句   ring   orm   

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()

 

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

标签:ons   pass   downgrade   img   session   and   语句   ring   orm   

原文地址:http://www.cnblogs.com/wongbingming/p/6833407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!