この記事では、Python での flask_merge と flask_script の使用方法を紹介します (コード付き)。これには一定の参考価値があります。必要な友人は参照できます。お役に立てれば幸いです。
flask_merge
falsk_sqlalchemy を使用する場合、後で「db.create_all」を使用してデータベース テーブルのフィールドを変更すると、データベースに自動的にマッピングされないため、削除する必要があります。 ,
次に、「db.create_all」を再実行して再マップします。これは要件を満たしていないため、
この問題を解決するには flask-migrate を使用します。モデル (クラス)
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 が生成され、テーブルにデータが含まれている場合、モデル (クラス) を変更するたびに、変更されたフィールドをデータベースにマップできます。このとき、ユーザーの使用に影響を与えずにデータベース テーブルに属性 (ユーザーの性別) を追加する必要があるため、データベース マイグレーションを使用してこれを処理し、元のデータベース操作ファイル model
# 测试:添加gender属性 gender = db.Column(db.BOOLEAN,default=True)# に属性を生成するコードを追加します。
##main 属性の移行
移行ウェアハウス (移行ディレクトリ) の作成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 Script 拡張機能は、外部スクリプトを Flask に挿入する機能を提供し、スクリプトをシステムから分離します全体的なフレームワーク
最初に、Python テンプレートを作成します。Python テンプレートは、script.py という名前のコマンド スクリプトを実行します。このファイルには、Manager インスタンスが必要です。Manager クラスは、すべてのコマンドの実行を追跡します。
Manager には 1 つのパラメータしかありません - Flask インスタンス
from flask_script import Command,Manager from flask import Flask app = Flask(__name__) manager = Manager(app) if __name__ == '__main__': manager.run()
コマンドの作成
次に、コマンドを作成して追加します。コマンドを作成するには 3 つの方法があります。つまり、コマンド サブクラスの作成、@command 修飾子を使用する方法、および @option 修飾子を使用する方法です。
サブクラスは次のようにする必要があります。実行メソッドを定義する
Hello コマンドを作成し、Hello コマンドを Manager インスタンスに追加する
class Hello(Command): """欢迎信息""" def run(self): print('hello,sheen') manager.add_command('hello',Hello)2 番目のタイプ - Command インスタンスの @command 修飾子を使用する
@manager.command def add_user(): """添加用户信息""" print('添加用户成功')3 番目のタイプ- コマンドの使用インスタンスの @option 修飾子
@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 での flask_merge と flask_script の使用の概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。