码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2019-11-14 14:58:15      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:添加   stat   user   注释   primary   删除   http   ade   debug   

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  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

标签:添加   stat   user   注释   primary   删除   http   ade   debug   

原文地址:https://www.cnblogs.com/wjun0/p/11857228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!