flask-sqlalchemy 遷移數據(生成數據庫表)與 查詢數據


1, 生成表

  db.Model主要用於數據庫的增刪改查操作, 構建表交給db.Table完成

  安裝 pip install flask-migrate

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,數據增刪查改的模型:

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字段時,查詢等操作的模型類也要寫,不寫會報錯

 

2,遷移數據,  添加

當數據庫升級,如增加字段,修改字段類型等,(刪除外鍵等)

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
View Code

修改好后執行步驟,如果是已經改過,可以只執行最后兩步

1,export FLASK_APP = init_db.py  #指定文件夾

2,flask db init  #生成migrations 文件 (遷移文件)

3,flask db migrate 生成版本文件    查看是否有變化 versions 多了一個文件 (修改的地方)

4,flask db upgrade  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM