国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python大佬養成計劃----flask_migrate,flask_script

YacaToy / 1103人閱讀

摘要:它可以在每次修改模型后,可以將修改的字段映射到數據庫中用戶名唯一且不能為空測試添加屬性指定該列信息是唯一的當已經生成數據庫表和時,并且表中包含數據時。

flask_migrate

在使用falsk_sqlalchemy時,采用"db.create_all"在后期修改數據庫表字段的時候,不會自動的映射到數據庫中,必須刪除表,

然后重新運行"db.create_all" 才會重新映射。這樣不符合我們的要求,因此flask-migrate就是為了解決
這個問題。它可以在每次修改模型(class)后,可以將修改的字段映射到數據庫中
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時,并且表中包含數據時。此時,要求我們對數據庫表添加屬性(用戶性別),且不影響用戶使用,我們使用數據庫遷移migrate的方式來處理,在原始數據庫操作文件model中加上生成屬性的代碼

 # 測試:添加gender屬性
    gender = db.Column(db.BOOLEAN,default=True)
migrate主要屬性

創建遷移倉庫(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

管理數據庫變更

新建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模板運行命令腳本,可起名為script.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()
創建命令

其次,創建并加入命令。
有三種創建命令的方式,即創建Command子類、使用@command修飾符、使用@option修飾符

第一種--創建Command子類
子類必須定義一個run方法
創建Hello命令,并將Hello命令加入Manager實例

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

manager.add_command("hello",Hello)

第二種——使用Command實例的@command修飾符

@manager.command
def add_user():
    """添加用戶信息"""

    print("添加用戶成功")

第三種——使用Command實例的@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()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44911.html

相關文章

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<