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()
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)
migrer les attributs principaux
Créer un entrepôt de migration (répertoire des migrations)
python manager.py db init
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 "添加性别"
a été supprimé dans la base de données
python manager.py db upgrade
pour afficher l'état historique des modifications ; renvoie l'état de la version spécifié ;
python manager.py db history
python manager.py db downgrade base
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()
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, '添加用户性别'
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 Flaskfrom flask_script import Command,Manager from flask import Flask app = Flask(__name__) manager = Manager(app) if __name__ == '__main__': manager.run()
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
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)
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('添加用户成功')
@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()
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!