ホームページ >バックエンド開発 >Python チュートリアル >Python での flask_merge と flask_script の使用の概要 (コード付き)

Python での flask_merge と flask_script の使用の概要 (コード付き)

不言
不言転載
2018-11-15 15:01:023243ブラウズ

この記事では、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

Python での flask_merge と flask_script の使用の概要 (コード付き)

データベース変更の管理

データベース変更を管理するための新しい 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 の使用の概要 (コード付き)

以上がPython での flask_merge と flask_script の使用の概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。