基于SQLAlchemy-Migrate api编写的数据库管理script,如何获取model包里的数据库table变动?

初学Python,跟着Miguel的Flask Mega Tutorial学习Flask,在第四章关于DB的内容中有一段,有一段使用SQLAlchemy-Migrate api自动截取db变动,并生成migrate script的功能。涉及到 imp 和 exec()的内容不是很明白,向大家求教:

import imp
from migrate.versioning import api
from app import db
from config import SQLALCHEMY_DATABASE_URI  
from config import SQLALCHEMY_MIGRATE_REPO 

v = api.db_version(SQLALCHEMY_DATABASE_URI, 
                   SQLALCHEMY_MIGRATE_REPO)
migration = SQLALCHEMY_MIGRATE_REPO +     
            ('/versions/%03d_migrate.py' % (v + 1))

tmp_module = imp.new_module('old_model')

old_model = api.create_model(SQLALCHEMY_DATABASE_URI, 
                             SQLALCHEMY_MIGRATE_REPO)
exec(old_model, tmp_module.__dict__)

scripts = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, 
          SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata)
open(migration, 'wt').write(scripts)

api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
print('The migration script is stored as ' + migration)
print('The current version: %03d' % (v,))

想要请教的问题是:我的Table类都放在app/models.py中,而这段代码则是保存在app的根目录,其中也没有直接引用到models,那么到底是如何获取我做的models的变动的?我知道事情应该是发生在tmp_module, old_model还有exec()这几个语句中,但是涉及内容比较深,独立出来看明白要干啥,但是整体联系起来就不为什么 exec之后,tmp_module拿到了最新的meta

  • 大家对单页面异步载入的组件如何进行缓存的?
  • 我把3.6的卸载了,也重启了,但是在cmd用python -V指令查看版本时,还是提示下图的python3.6
  • npm安装和pip安装
  • 为什么不推荐用len()判断列表是否为空?
  • 如何实现多次执行device.startActivity(component=runComponent)
  • tornado设置了openssl后如何使用SSL流程
  • python(flask) 管理git裸库,类似gitlab
  • textarea中不断写入数据,然后浏览器非常卡,求解决方案。
  • requests如何进行cookie模拟登录
  • py2exe问题求助
  • Python: 实时数据画图,横轴显示时间(小时,分钟),纵轴显示随时间变化的另一个量,怎样做?