이 글은 Python에서 플라스크_마이그레이션 및 플라스크_스크립트 사용에 대한 소개를 제공합니다(코드 포함). 필요한 친구들이 참고할 수 있기를 바랍니다.
flask_ migration
falsk_sqlalchemy를 사용할 때 'db.create_all'을 사용하여 나중에 데이터베이스 테이블 필드를 수정하면 데이터베이스에 자동으로 매핑되지 않습니다. 테이블을 삭제한 후
'db.create_all'을 다시 실행해야 합니다. '가 다시 매핑됩니다. 이는 우리의 요구 사항을 충족하지 않으므로 플라스크 마이그레이션이 이 문제를 해결합니다. 모델(클래스)이 수정될 때마다 수정된 필드를 데이터베이스에 매핑할 수 있습니다.
from flask_sqlalchemy import SQLAlchemy from flask import Flask import pymysql from sqlalchemy import desc from flask_bootstrap import Bootstrap app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/migrate_sql' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app) app.config['SECRET_KEY'] = 'SHEEN' bootstrap = Bootstrap(app) class User(db.Model): id = db.Column(db.INTEGER,autoincrement=True,primary_key=True) # 用户名唯一且不能为空 name = db.Column(db.String(30),unique=True,nullable=False) # 测试:添加gender属性 gender = db.Column(db.BOOLEAN,default=True) todos = db.relationship('Todo',backref='user') class Todo(db.Model): id = db.Column(db.INTEGER, autoincrement=True, primary_key=True) # unique: 指定该列信息是唯一的; name = db.Column(db.String(50)) user_id = db.Column(db.INTEGER,db.ForeignKey('user.id')) if __name__ == '__main__': db.create_all()데이터베이스 테이블 user 및 todo가 생성되고 테이블에 데이터가 포함되어 있는 경우. 이때 사용자 사용량에 영향을 주지 않고 데이터베이스 테이블에 속성(사용자 성별)을 추가해야 합니다. 이를 처리하기 위해 데이터베이스 마이그레이션을 사용하고, 원본 데이터베이스 작업 파일 모델
# 测试:添加gender属性 gender = db.Column(db.BOOLEAN,default=True)
migration에서 속성을 생성하는 코드를 추가합니다. 주로 속성
마이그레이션 웨어하우스(migrations 디렉터리) 생성python manager.py db init클래스 내용을 읽어 버전 파일을 생성하는데 실제로 데이터베이스에 추가되거나 삭제되지는 않습니다.
python manager.py db migrate -m "添加性别"데이터베이스에서 삭제되었습니다. ;
python manager.py db upgrade변경 사항 보기로 이동 기록 상태;
python manager.py db history지정된 버전 상태 반환;
python manager.py db downgrade base
데이터베이스 변경 사항 관리
새 Manage.py 파일을 생성하여 데이터베이스 변경 사항 관리from flask_script import Manager from flask_migrate import Migrate, MigrateCommand from models import app,db migrate = Migrate(app,db) manager = Manager(app) manager.add_command('db',MigrateCommand) if __name__ == '__main__': manager.run()단계:
1. 初始化(自动生成migrations目录) python manager.py db init 2. 生成最初的迁移 python manager.py db migrate -m '添加用户性别' 出现语句:Detected added column 'user.gender',表明对model有所改动 3.数据库升级 python manager.py db upgrade 生成数据库历史版本的py文件:Running upgrade -> 202a710ebeb6, '添加用户性别'
flask_script
Flask 스크립트 확장 Flask에 외부 스크립트를 삽입하는 기능을 제공하여 시스템에서 스크립트를 분리합니다전체 프레임워크
먼저 스크립트라는 이름을 붙일 수 있는 명령 스크립트를 실행하는 Python 템플릿을 만듭니다. .py이 파일에는 Manager 인스턴스가 있어야 하며 Manager 클래스는 명령줄에서 호출되는 모든 명령과 프로세스의 실행을 추적합니다.
Manager에는 Flask 인스턴스
from flask_script import Command,Manager from flask import Flask app = Flask(__name__) manager = Manager(app) if __name__ == '__main__': manager.run()
Create 명령
두 번째로 매개변수가 하나만 있습니다. 명령을 작성하고 참여하십시오.명령을 생성하는 방법에는 Command 하위 클래스 생성, @command 한정자 사용 및 @option 한정자 사용의 세 가지 방법이 있습니다.
하위 클래스는 실행 메서드를 정의해야 합니다.
Hello 생성 명령을 실행하고 Manager 인스턴스에 Hello 명령을 추가합니다
class Hello(Command): """欢迎信息""" def run(self): print('hello,sheen') manager.add_command('hello',Hello)두 번째 - Command 인스턴스의 @command 수식어를 사용합니다
@manager.command def add_user(): """添加用户信息""" print('添加用户成功')세 번째 - Command 인스턴스의 @option 수식어를 사용합니다
@을 사용하는 것이 좋습니다. 옵션, 원하는 만큼 매개변수를 전달할 수 있습니다
@manager.option('-n','--name',help='删除用户') def del_user(name): """删除用户信息""" if name: print('删除用户%s成功' %(name)) else: print('用户名为空!')
전체 예시
# script.py from flask_script import Command,Manager from flask import Flask app = Flask(__name__) manager = Manager(app) class Hello(Command): """欢迎信息""" def run(self): print('hello,sheen') manager.add_command('hello',Hello) @manager.command def add_user(): """添加用户信息""" print('添加用户成功') @manager.option('-n','--name',help='删除用户') def del_user(name): """删除用户信息""" if name: print('删除用户%s成功' %(name)) else: print('用户名为空!') if __name__ == '__main__': manager.run()
위 내용은 Python에서 플라스크_마이그레이션 및 플라스크_스크립트 사용 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!