Maison > développement back-end > Tutoriel Python > Introduction à l'utilisation de flask_migrate et flask_script en python (avec code)

Introduction à l'utilisation de flask_migrate et flask_script en python (avec code)

不言
Libérer: 2018-11-15 15:01:02
avant
3231 Les gens l'ont consulté

Cet article vous apporte une introduction à l'utilisation de flask_migrate et flask_script en python (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

flask_migrate

Lors de l'utilisation de falsk_sqlalchemy, l'utilisation de 'db.create_all' ne sera pas automatiquement mappée à la base de données lors de la modification ultérieure des champs de la table de base de données et doit être supprimée.

puis réexécutez 'db.create_all' sera remappé. Cela ne répond pas à nos exigences, donc flask-migrate doit résoudre
ce problème. Il peut mapper les champs modifiés à la base de données après chaque modification du modèle (classe)

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()
Copier après la connexion

Lorsque les tables de base de données user et todo ont été générées et que les tables contiennent des données. À l'heure actuelle, nous devons ajouter des attributs (sexe de l'utilisateur) à la table de la base de données sans affecter l'utilisation de l'utilisateur. Nous utilisons la migration de la base de données pour la gérer et ajoutons le code pour générer les attributs dans le modèle de fichier d'opération de base de données d'origine

 # 测试:添加gender属性
    gender = db.Column(db.BOOLEAN,default=True)
Copier après la connexion

migrer les attributs principaux

Créer un entrepôt de migration (répertoire des migrations)

python manager.py  db init
Copier après la connexion

Lire le contenu de la classe et générer le fichier de version, qui n'est pas actuellement dans la base de données Ajouter ou supprimer ;

python manager.py  db migrate -m "添加性别"
Copier après la connexion

a été supprimé dans la base de données

python manager.py  db upgrade
Copier après la connexion

pour afficher l'état historique des modifications ; renvoie l'état de la version spécifié ;

python manager.py  db history
Copier après la connexion

python manager.py  db downgrade  base
Copier après la connexion

Introduction à lutilisation de flask_migrate et flask_script en python (avec code)Gérer les modifications de la base de données

Créer un nouveau fichier manage.py pour gérer les modifications de la base de données

Étapes :

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()
Copier après la connexion

flask_script
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, '添加用户性别'
Copier après la connexion

L'extension Flask Script fournit la fonction d'insérer des scripts externes dans Flask, créant ainsi le script et système séparé

Cadre global

Tout d'abord, créez un modèle Python pour exécuter le script de commande, qui peut être nommé script.pyDans ce fichier, il y a doit être une instance Manager et la classe Manager suit toutes les commandes sur la ligne de commande. La commande appelée et l'état de l'opération d'appel du processus de traitement

Manager n'a qu'un seul paramètre - Instance Flask



Créer une commande
from flask_script import Command,Manager
from flask import Flask

app = Flask(__name__)

manager = Manager(app)
if __name__ == '__main__':
    manager.run()
Copier après la connexion

Deuxièmement, créez et rejoignez la commande. Il existe trois façons de créer une commande, à savoir créer une sous-classe Command, en utilisant le modificateur @command et en utilisant le modificateur @option

La première façon - créer une sous-classe Command
La sous-classe doit définir une La méthode run

crée la commande Hello et ajoute la commande Hello à l'instance Manager



La deuxième méthode - en utilisant le modificateur @command de l'instance Command

class  Hello(Command):
    """欢迎信息"""
    def run(self):
        print('hello,sheen')

manager.add_command('hello',Hello)
Copier après la connexion

La troisième méthode ——Utilisez le modificateur @option de l'instance de commande

Il est recommandé d'utiliser @option;, vous pouvez transmettre plusieurs paramètres
@manager.command
def add_user():
    """添加用户信息"""

    print('添加用户成功')
Copier après la connexion


Exemple complet
@manager.option('-n','--name',help='删除用户')
def del_user(name):
    """删除用户信息"""

    if name:
        print('删除用户%s成功' %(name))
    else:
        print('用户名为空!')
Copier après la connexion

# 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()
Copier après la connexion

Introduction à lutilisation de flask_migrate et flask_script en python (avec code)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal