flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据

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

修改好后执行步骤,若是是已经改过,能够只执行最后两步性能

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

相关文章
相关标签/搜索