一、定义数据模型 models
SQLAlchemy 允许我们根据数据库的表结构来创建数据模型, 反之亦可. 所以我们一般无须手动的登录到数据库中使用 SQL 语句来创建表, 我们只需把数据模型定义好了之后, 表结构也就有了.
首先要初始化 SQLAlchemy, 在 models.py 中把
app 对象 传入 SQLAlchemy :
#encoding:utf-8
from flask_sqlalchemy import SQLAlchemy
# SQLAlchemy 会自动的从 app 对象中的 DevConfig 中加载连接数据库的配置项
db = SQLAlchemy()
db 是 class SQLAlchemy 的实例化对象, 包含了 SQLAlchemy 对数据库操作的支持类集.
接下来, 我们就可以在 models.py 中定义 models 类了:
#encoding: utf-8
from exts import db
class User(db.Model):
__tablename__='user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
telephone = db.Column(db.String(11),nullable=False)
username = db.Column(db.String(50),nullable=False)
password = db.Column(db.String(100),nullable=False)
这样我们就得到了一个 User models, 该模型是基于 user 表的. 该数据表拥有 4 个字段 id/telephone/username/password 对应这由 class db.Column 实例化出来的 4 个对象, 当 class User 继承自 db.Model 时, SQLAlchemy 与 数据库的连接通过就已经自动的 Ready 了.db.Column: 其构造器的第一个参数是可选的, 如果传入实参时, 表示创建的字段名. 反之, 则默认使用该实例化对象的名字(即 User 的类属性名); 第二个参数指定了字段的数据类型.
然后在manger.py中导入User模型
#encoding:utf-8
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from demo import app
from exts import db
from models import User
manager= Manager(app)
#使用Migrate绑定app和db
migrate = Migrate(app,db)
#添加迁移脚本的命令到manager中
manager.add_command('db',MigrateCommand)
if __name__ == '__main__':
manager.run()
MigarateCommand会去读取当前导入的模型User并映射到数据库中
最后进入当前项目所在目录:
先初始化当前的数据库环境
python manage.py db init
这时候项目会多出一个migrations文件夹
初始化当前项目的一个迁移环境
python manage.py db migrate
然后
python manage.py db upgrade
这样我们数据库里面就已经创建好User表了,进入数据库进行查看
mysql -u root -p
use db_demo
show tables
desc user
就可以看到我们已经创建好的User表的结构了