flask模型配置和迁移同步

1.创建一个flask项目

2.下载第三方库:

        1) pip install pymysql

        2) pip install flask-script

        3) pip install flask-sqlalchemy

        4) pip install flask-migrate

3.创建配置文件settings.py

settings.py

class Config:
    DEBUG = True
    # mysql+pymysql://user:password@hostip:port/databasename
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/flask1' # 连接数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 如果设置为 True(默认),Flask-SQLAlchemy 将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以禁用。
    SQLALCHEMY_ECHO = True  # 调试模式设置为True


class DevelopmentConfig(Config):   # 开发阶段
    ENV = 'development'


class ProductionConfig(Config):    # 上线阶段
    ENV = 'production'
    DEBUG = False

4.新建 apps包文件(用于实例化Flask对象) 和 exts包文件(用于第三方模块)

apps/__init__.py文件

from flask import Flask
import settings

# 定义Flask实例化方法
def create_app():
    # 实例化Flask实例,并将模版文件夹 templates 和静态模版文件夹 static 的默认值进行修改
    app = Flask(__name__, template_folder='../templates', static_folder='../static')
    # 设置app的配置
    app.config.from_object(settings.DevelopmentConfig)
    return app

5.在项目根目录下创建manage.py执行文件

manage.py

from flask import Flask
from flask_script import Manager
from apps import create_app

# 实例化app对象
app = create_app()
# 将app绑定到manager
manager = Manager(app=app)

if __name__ == '__main__':
    manager.run()

6.在exts包文件夹下的init.py文件中实例化SQLAlchemy对象

exts/__init__.py

from flask_sqlalchemy import SQLAlchemy
# 创建SQLAlchemy实例
db = SQLAlchemy()

7.在apps下的init.py文件中初始化配置db

apps/__init__.py

from flask import Flask
import settings
from exts import db

# 定义Flask实例化方法
def create_app():
    # 实例化Flask实例,并将 templates 和 static 的默认值进行修改
    app = Flask(__name__, template_folder='../templates', static_folder='../static')
    # 设置app的配置
    app.config.from_object(settings.DevelopmentConfig)
    # 初始化配置db
    db.init_app(app=app)
    return app

8.在执行文件中绑定 migrate 命令模块

manege.py

from flask import Flask
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from apps import create_app
from exts import db

# 实例化app对象
app = create_app()
# 将app绑定到manager
manager = Manager(app=app)
# 将app、数据库与migrate连接起来
migrate = Migrate(app=app, db=db)
# 将migrate的命令添加到manager中  命令名称为db,用于执行数据库的一些操作
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

9.在apps包中创建一个user包 并创建视图文件 view.py 和 模版文件 models.py,在项目根目录下 templates 模版文件夹并在其下创建一个user文件夹用于存储user的模版文件

10.编辑数据库模型文件

apps/user/models.py

from datetime import datetime
from exts import db

# 创建User表, 必须继承db的Model类
class User(db.Model):
    # 使用 db 的 Column 将'字段'映射到数据库的表中  db.Column(类型,约束)
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 整型 primary_key主键  autoincrement自增
    username = db.Column(db.String(15), nullable=False)  # varchar类型  nullable是否可以为空
    password = db.Column(db.String(12), nullable=False)  # varchar类型
    phone = db.Column(db.String(11), unique=True)  # varchar类型  unique是否唯一
    rdatetime = db.Column(db.DateTime, default=datetime.now)  #日期时间类型   default默认值

    # 打印对象时自动返回对象的username
    def __str__(self):
        return self.username

11.在执行文件中导入模型类

manage.py

from flask import Flask
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from apps.user.models import User    # 一定要在运行文件中导入模型 不然映射到数据库不成功
from apps import create_app
from exts import db

# 实例化app对象
app = create_app()
# 将app绑定到manager
manager = Manager(app=app)
# 将app、数据库与migrate连接起来
migrate = Migrate(app=app, db=db)
# 将migrate的命令添加到manager中  命令名称为db,用于执行数据库的一些操作
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

12.生成migrations 文件夹

终端运行命令:

python app.py db init

运行后会在项目根目录中产生一个migrations文件夹

13.产生迁移文件

终端运行命令

python3 app.py db migrate

迁移(只要模板发生修改就要进行一次迁移然后同步) 产生版本文件

运行后会在migrations 文件夹下的versions文件夹中产生一个版本文件

14.将模版文件与数据库同步

终端运行命令:

python3 app.py db upgrade

同步(将模版映射到数据库————创建表)

同步成功后数据库中会生成一个 user 表和一个 alembic_version (用于存储版本号)如下图:

python app.py db init           只需要执行一次

python app.py db migrate    迁移模型生成模型文件

python app.py db upgrade  同步(将模版映射到数据库————创建表)

python3 app.py db downgrade 版本降级同步(将上个版本的模版映射到数据库,此时数据库中的结构是上个版本模版的结构)

15.项目结构

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值