【Flask项目2】模型类的映射方式新版本和旧版本(4)
方式一:模型類(lèi)的映射方式舊版本
1、Flask-Migrate介紹
k-migrate可以十分方便的進(jìn)行數(shù)據(jù)庫(kù)的遷移與映射,將我們修改過(guò)的ORM模型映射到數(shù)據(jù)庫(kù)中。flask_migrate是基于Alembic進(jìn)行的一個(gè)封裝,并集成到Flask中,所有的遷移操作其實(shí)都是Alembic做的,他能跟蹤模型的變化,并將變化映射到數(shù)據(jù)庫(kù)中。
如果導(dǎo)入不成功,是因?yàn)閒lask與flask-migrate的版本沖突造成的
解決辦法,1、全面降低版本
2、Flask-Migrate使用
在項(xiàng)目中新建一個(gè)test_migrate.py文件
from financial import create_app from comment.models import db from flask_script import Manager from flask_migrate import Migrate, MigrateCommand''' 如果導(dǎo)入不成功,是因?yàn)閒lask與flask-migrate的版本沖突造成的 解決辦法, 1、全面降低版本 2、按照新版本的方法執(zhí)行命令 '''-----------------------下面的代碼是老版本的代碼----------------------------- # 1、初始化app app = create_app('develop')# 2、導(dǎo)入模型類(lèi) from comment.models.user import User from comment.models.account import Account# 3、初始化manager manager = Manager(app)# 4、用來(lái)綁定app和db到flask-migrate Migrate(app, db)# 5、添加Migrate的所有子命令到db下 manager.add_command('financial_db', MigrateCommand)if __name__ == '__main__':manager.run()3、執(zhí)行以下命令
1. 初始化一個(gè)環(huán)境:python db_manage.py db init 2. 自動(dòng)檢測(cè)模型,生成遷移腳本:python db_manage.py db migrate 3. 將遷移腳本映射到數(shù)據(jù)庫(kù)中:python db_manage.py db upgrade 4. 更多命令:python db_manage.py db --help方式二:模型類(lèi)的映射方式新版本
如果導(dǎo)入不成功,是因?yàn)閒lask與flask-migrate的版本沖突造成的
解決辦法,2、按照新版本的方法執(zhí)行命令
在項(xiàng)目main.py文件中,初始化migrate對(duì)象
初始化完成之后,執(zhí)行以下命令
flask db init flask db migrate flask db upgrade直接執(zhí)行上面3個(gè)命令,需要默認(rèn)的Flask項(xiàng)目入口文件(app.py),我的項(xiàng)目的入口文件是main文件。
當(dāng)前項(xiàng)目沒(méi)有默認(rèn)的flask項(xiàng)目入口文件,需要設(shè)置環(huán)境變量:
怎么設(shè)置?
在終端中輸入命令
特別注意1:如果flask項(xiàng)目的入口文件不是app.py,那么一定要設(shè)置環(huán)境變量,之后再執(zhí)行上面3個(gè)命令
set FLASK_APP=financial/main.py特別注意2:執(zhí)行3個(gè)命令之后,并不會(huì)再數(shù)據(jù)庫(kù)中看到表,原因是沒(méi)有將模型類(lèi)加載到app.py文件中,打入即可,代碼如下
from financial import create_appapp=create_app('develop') from comment.models.user import User from comment.models.account import Accountif __name__ == '__main__':app.run() from flask import Flask from settings.default import map_config from flask_migrate import Migrate我的main.py文件: ''' 創(chuàng)建app的函數(shù),參數(shù)代表運(yùn)行的類(lèi)型:開(kāi)發(fā)環(huán)境、生產(chǎn)環(huán)境 ''' def create_app(run_type):#創(chuàng)建appapp=Flask(__name__)#加載整個(gè)項(xiàng)目的配置app.config.from_object(map_config[run_type])#初始化SQLALchemyfrom comment.models import dbdb.init_app(app)#初始化redis的數(shù)據(jù)庫(kù)連接from comment.utils.financial_Redis import frfr.init_app(app)#初始化日志處理的工具from comment.utils.financial_logging import create_loggercreate_logger(app)#初始化migrate之后,可以執(zhí)行命令# flask db init# flask db migrate# flask db upgrade# 直接執(zhí)行上面3哥命令,需要默認(rèn)的Flask項(xiàng)目入口文件(app.py)# 當(dāng)前項(xiàng)目沒(méi)有默認(rèn)的flask項(xiàng)目入口文件,需要設(shè)置環(huán)境變量:Migrate(app,db)return app總結(jié)
以上是生活随笔為你收集整理的【Flask项目2】模型类的映射方式新版本和旧版本(4)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python通过requirements
- 下一篇: load、loads、dump、dump