1, 生成表html
db.Model主要用於數據庫的增刪改查操做, 構建表交給db.Table完成mysql
安裝 pip install flask-migratesql
from datetime import datetime from flask_sqlalchemy import SQLAlchemy from sqlalchemy.dialects.mysql import TINYINT, BIGINT, VARCHAR, CHAR, DATETIME, INTEGER # 使用原生sqlalchemy建立字段 app = create_app() # 建立數據庫鏈接對象 db = SQLAlchemy(app) # 構建表 t_user = db.Table('user_basic', db.Column('user_id', BIGINT(10, unsigned=True), nullable=False, primary_key=True, autoincrement=True, comment='主鍵'), db.Column('status', TINYINT(1), nullable=False, default=1, comment="狀態"), # db.Column('status1', TINYINT(1), nullable=False, default=1, comment="狀態1"), db.Column('mobile', CHAR(11), nullable=False, unique=True, comment='手機號'), db.Column('create_time', DATETIME, nullable=False, default=datetime.now, comment='建立時間'), db.Column('update_time', DATETIME, nullable=False, default=datetime.now, onupdate=datetime.now, comment='更新時間'), # 注意: 若是有外鍵, 定義方式和普通字段同樣, 能夠添加索引提升性能 # db.Column('leader_id', BIGINT(10, unsigned=True), default=0, comment='上級的id', index=True), mysql_engine='MyISAM', mysql_charset='utf8mb4') if __name__ == '__main__': db.drop_all() db.create_all() #調用create_all()能找到對應的db.Tabke而後生成表
註釋:邏輯外鍵添加index = True,生成外鍵,查詢速度快數據庫
2,數據增刪查改的模型:flask
from datetime import datetime from flask_sqlalchemy import SQLAlchemy def create_app(): #在其餘地方封裝的 app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/sqlalchemy_test?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False return app app = create_app() # 爲了不和建立表的db產生衝突, 建立專門用於數據操做的SQLAlchemy對象 model_db = SQLAlchemy(app) class User(model_db.Model): # db.Model主要用於數據的增刪改查, 構建表交給db.Table去完成 __tablename__ = 'user_basic' # 因爲模型不用於建表, 因此類型不須要設置的很嚴謹, 並能夠省略大部分字段細節(除了default參數) user_id = model_db.Column(model_db.Integer, primary_key=True) status = model_db.Column(model_db.Integer, default=1) mobile = model_db.Column(model_db.String(11)) create_time = model_db.Column(model_db.DateTime, default=datetime.now) update_time = model_db.Column(model_db.DateTime, default=datetime.now) @app.route('/') def index(): user1 = User() user1.mobile = '18912341234' model_db.session.add(user1) model_db.session.commit() return 'index' if __name__ == '__main__': app.run(debug=True)
註釋:建表時若是字段中有default字段時,查詢等操做的模型類也要寫,不寫會報錯session
2,遷移數據, 添加app
當數據庫升級,如增長字段,修改字段類型等,(刪除外鍵等)ide
from datetime import datetime from flask_sqlalchemy import SQLAlchemy from sqlalchemy.dialects.mysql import TINYINT, BIGINT, VARCHAR, CHAR, DATETIME, INTEGER from tool import create_app from flask_migrate import Migrate app = create_app() # 建立數據庫鏈接對象 db = SQLAlchemy(app) # 初始化遷移器 Migrate(app, db) # 構建表 t_user = db.Table('user_basic', db.Column('user_id', BIGINT(10, unsigned=True), nullable=False, primary_key=True, autoincrement=True, comment='主鍵'), db.Column('status', TINYINT(1), nullable=False, default=1, comment="狀態"), # db.Column('status1', TINYINT(1), nullable=False, default=1, comment="狀態1"), db.Column('mobile', CHAR(11), nullable=False, unique=True, comment='手機號'), db.Column('create_time', DATETIME, nullable=False, default=datetime.now, comment='建立時間'), db.Column('update_time', DATETIME, nullable=False, default=datetime.now, onupdate=datetime.now, comment='更新時間'), # 注意: 若是有外鍵, 定義方式和普通字段同樣, 能夠添加索引提升性能 # db.Column('leader_id', BIGINT(10, unsigned=True), default=0, comment='上級的id', index=True), mysql_engine='MyISAM', mysql_charset='utf8mb4') if __name__ == '__main__': # db.drop_all() # db.create_all() pass
修改好後執行步驟,若是是已經改過,能夠只執行最後兩步性能
1,export FLASK_APP = init_db.py #指定文件夾spa
2,flask db init #生成migrations 文件 (遷移文件)
3,flask db migrate 生成版本文件 查看是否有變化 versions 多了一個文件 (修改的地方)
4,flask db upgrade
原文出處:https://www.cnblogs.com/wjun0/p/11857228.html