目录
三、将flask-sqlalchemy和flask-migrate建立关联
2、终端执行命令:python app.py db init 创建文件夹
3、终端执行命令:python app.py db migrate 自动产生一个版本文件
4、终端执行命令:python app.py db upgrade 同步到数据库
一、安装库
安装flask-sqlalchemy 报错 见 解决方案
pip install pymysql
pip install flask-sqlalchemy
pip install flask-migrate==2.7.0
pymysql 建公路
flask-sqlalchemy 实现映射
flask-migrate 发布命令工具 ,主要操作ORM
二、配置数据库的连接
1、目录结构
2、修改settings.py
class Config:
DEBUG = True
# 数据库配置
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://用户名:密码@IP:3306/bar'
class DevelopmentConfig(Config):
ENV = 'development'
class ProductionConfig(Config):
ENV = 'production'
DEBUG = False
3、修改apps下的__init__.py
from flask import Flask
import settings
from apps.user.view import user_bp
def create_app():
app = Flask(__name__, template_folder='../templates', static_folder='../static')
# 加载配置
app.config.from_object(settings.DevelopmentConfig)
# 蓝图 ,将蓝图对象绑定到app上
app.register_blueprint(user_bp)
return app
三、将flask-sqlalchemy和flask-migrate建立关联
1 、新增ext包
2、编辑ext的__init__.py
# 创建一个映射的对象
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
3、修改apps下__init__.py
from flask import Flask
import settings
from apps.user.view import user_bp
from ext import db
def create_app():
app = Flask(__name__, template_folder='../templates', static_folder='../static')
# 加载配置
app.config.from_object(settings.DevelopmentConfig)
# 将db对象与app进行关联
db.init_app(app=app)
# 蓝图 ,将蓝图对象绑定到app上
app.register_blueprint(user_bp)
return app
4、修改app.py
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from apps import create_app
from ext import db
app = create_app()
print(app)
manager = Manager(app=app)
# 命令工具
migrate = Migrate(app=app, db=db)
# 添加命令到manager
manager.add_command('db', MigrateCommand)
@manager.command
def init():
print('初始化')
if __name__ == '__main__':
manager.run()
5、验证db命令是否添加成功
输入
python app.py
通过
可以看出他是操作数据库的,输入
python app.py db --help
可以查看哪些命令可以使用
6、解决出现警告问题
修改settings.py
class Config:
DEBUG = True
# 数据库配置
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://用户名:密码@IP:3306/bar'
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True
class DevelopmentConfig(Config):
ENV = 'development'
class ProductionConfig(Config):
ENV = 'production'
DEBUG = False
四、创建模型
apps/user包下创建models.py
from datetime import datetime
from ext import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(12), nullable=False)
phone = db.Column(db.String(11), unique=True)
rdatetime = db.Column(db.DateTime, default=datetime.now)
def __str__(self):
return self.username
五、使用命令将模型映射到数据库
1、将模型导入到app(重要,不管你是否引用)
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from apps import create_app
from ext import db
from apps.user.models import User
app = create_app()
print(app)
manager = Manager(app=app)
# 命令工具
migrate = Migrate(app=app, db=db)
# 添加命令到manager
manager.add_command('db', MigrateCommand)
@manager.command
def init():
print('初始化')
if __name__ == '__main__':
manager.run()
2、终端执行命令:python app.py db init 创建文件夹
python app.py db init
目录多了一个文件夹migrations
此命令一般执行一次
3、终端执行命令:python app.py db migrate 自动产生一个版本文件
python app.py db migrate
在migrations下生成了一个.py文件
4、终端执行命令:python app.py db upgrade 同步到数据库
python app.py db upgrade
数据库表创建成功:
python app.py db downgrade 是降级版本命令,了解一下即可