1.建立数据库表模型
# /flask_shop/models.py
# 此文件用于建立数据库表的模型
# 需要针对数据库的模型
from flask_shop import db
# 需要继承数据库中的模型
class User(db.Model):
__tablename__ = 't_user'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(32), unique=True, nullable=False)
pwd = db.Column(db.String(128))
nick_name = db.Column(db.String(32))
phone = db.Column(db.String(11))
email = db.Column(db.String(32))
2.Navicat
打开navicat,在localhost下创建一个flask_shop,需要对应好配置文件中对应的数据库
3.主文件操作(manager.py)
注释app.run(), 使用manager.run()去操作数据库
# manager.py
# 只负责运行项目
# 引入db
from flask_shop import create_app,db
# MigrateCommand migrate的命令
from flask_migrate import Migrate,MigrateCommand
# 管理:方便数据库的同步
from flask_script import Manager
app = create_app('develop')
# migrate和同步数据库配置
manager = Manager(app)
Migrate(app,db)
manager.add_command('db',MigrateCommand)
if __name__ == "__main__":
# app.run()
# flask专门管理的命令
manager.run()
4.建立表映射
4.1生成migrations文件
migrations用于管理数据库,数据库映射
python .\manager.py db init
4.2SQLALCHEMY映射数据库
D:\Python_soft\Anaconda\Anaconda_file\python.exe .\manager.py db migrate
抛出如下信息
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
//说明对数据库没有产生改变
INFO [alembic.env] No changes in schema detected.
原因:
models.py并没有引入到文件中
处理方法:
# /flask_shop/models.py
# 此文件用于建立数据库表的模型
# flask_shop/user/view.py
# 此文件用于处理关于用户的业务逻辑,视图都写在这
# 导入用户的蓝图对象,这里的user不是文件,是在user.py定义好的蓝图对象
from flask_shop.user import user
from flask_shop import db
from flask_shop import models
@user.route("/")
def index():
return "Hello user"
再次映射数据库
此时,在migrations文件夹中的vision中会产生一个py文件,但是没有发生映射,需要手动映射一下。
D:\Python_soft\Anaconda\Anaconda_file\python.exe .\manager.py db upgrade
映射成功到此结束
5.思路整理
- python manager.py db init 执行一次
- python manager.py db migrate 生成表结构
- python manager.py db upgrade 映射数据库
- 以后需要更新时候,执行2和3两步骤就好
- 注意:main中一定执行的是manager.run()才能映射