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.项目结构