數據庫遷移:python
先準備py文件:mysql
from flask import Flask
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
class Config(object):
"""項目配置信息"""
# 數據庫連接配置
SQLALCHEMY_DATABASE_URI = "mysql://root:cq@127.0.0.1:3306/migrate18"
# 開啓數據庫跟蹤操做
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 加密字符串
SECRET_KEY = "SAKDALSDJSALKASDLASDKLSAKJJ"
#1.建立app對象
app = Flask(__name__)
# 添加配置到app中
app.config.from_object(Config)
#2.建立數據庫對象
db = SQLAlchemy(app)
#3.建立遷移對象
migrate = Migrate(app, db)
#4.建立管理對象 python xx.py runserver -h ip -p port
manager = Manager(app)
#5.將命令添加到管理對象中
# 參數1: 命名名稱 參數2:命令類型
# python demo2_migrate.py db xx
manager.add_command("db", MigrateCommand)
#定義模型Role
class Role(db.Model):
# 定義表名
__tablename__ = 'roles'
# 定義列對象
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
user = db.relationship('User', backref='role')
#repr()方法顯示一個可讀字符串,
def __repr__(self):
return 'Role:'.format(self.name)
#定義用戶
class User(db.Model):
__talbe__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
email = db.Column(db.String(64))
password = db.Column(db.String(64))
#設置外鍵
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
def __repr__(self):
return 'User:'.format(self.username)
# 數據庫遷移操做
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
# app.run(debug=True)
#6.使用管理對象啓動的flask項目
manager.run()
在pycharme終端運行:sql
運行命令: python3 py文件 runserver -h ip地址 -p 端口號 -d數據庫
初始化命令: python3 py文件 db init(第一次執行的時候纔會使用該命令,只使用一次,會產生migrations文件夾)flask
數據庫遷移,會造成新的版本: python3 py文件 db migrate -m "XXXX" (-m:指明對這一步操做的註釋,只要模型對象的屬性發生變化都會執行)app
升級建立真正的數據庫表: python3 py文件 db upgrade (進行數據庫遷移的版本升級纔會真正建立數據庫的表(只要模型對象的屬性發生該表都要執行))加密
查詢歷史版本: python3 py文件 db historyurl
回退到對應的低版本: python3 py文件 db downupgrade 版本號spa
回到高版本對應的版本: python3 py文件 db upgrade 版本號debug
藍圖:
from flask import Flask
from cart import cart_bp
app = Flask(__name__)
app.register_blueprint(cart_bp)
@app.route("/index")
def index():
return "index"
@app.route("/goodlist")
def goodlist():
return "goodlist"
@app.route("/detail")
def detail():
return "detail"
@app.route("/center")
def center():
return "center"
if __name__ == '__main__':
print(app.url_map)
app.run(debug=True)
輸出:
Map([<Rule '/goodlist' (HEAD, OPTIONS, GET) -> goodlist>,
<Rule '/detail' (HEAD, OPTIONS, GET) -> detail>,
<Rule '/center' (HEAD, OPTIONS, GET) -> center>,
<Rule '/index' (HEAD, OPTIONS, GET) -> index>,
<Rule '/test' (HEAD, OPTIONS, GET) -> cart_bp.test>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
cart.py:
from flask import Blueprint
cart_bp = Blueprint("cart_bp", __name__)
@cart_bp.route("/test")
def test():
return "test"