>  기사  >  백엔드 개발  >  Python에서 플라스크_마이그레이션 및 플라스크_스크립트 사용 소개(코드 포함)

Python에서 플라스크_마이그레이션 및 플라스크_스크립트 사용 소개(코드 포함)

不言
不言앞으로
2018-11-15 15:01:023167검색

이 글은 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

Python에서 플라스크_마이그레이션 및 플라스크_스크립트 사용 소개(코드 포함)

데이터베이스 변경 사항 관리

새 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 한정자 사용의 세 가지 방법이 있습니다.

첫 번째 방법 - Command 하위 클래스 생성

하위 클래스는 실행 메서드를 정의해야 합니다.
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에서 플라스크_마이그레이션 및 플라스크_스크립트 사용 소개(코드 포함)

위 내용은 Python에서 플라스크_마이그레이션 및 플라스크_스크립트 사용 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제