Flask 第四课Flask数据模型Model
tags:
- Flask
- 2019千锋教育
categories:
- flask
- model
- 数据模型
- flask-caching
文章目录
第一节 flask的模型
Flask默认并没有提供任何数据库操作的API,我们可以选择任何适合自己项目的数据库来使用Flask中可以自己的选择数据,用原生语句实现功能,也可以选择ORM ( SQLAIchemy,MongoEngine)
- 原生SQL缺点
- 代码利用率低,条件复杂代码语句越长,有很多相似语句
- 一些SQL是在业务逻辑中拼出来的,修改需要了解业务逻辑
- 直接写SQL容易忽视SQL问题
- ORM将对对象的操作转换为原生SQL优点
- 性能损耗少
- 设计灵活,可以轻松实现复杂查询
- 移植性好
python的ORM (SQLAIchemy)针对于Flask的支持: pip install flask-sqlalchemy -i https://pypi.douban.com/simple
第二节 数据库连接
1. mysql连接
dialect+driver://usermame:password@host:port/database
dialect数据库实现 driver数据库的驱动
例子:
app.config[‘SQLALCHEMY_DATABASE_URI’]=‘mysql+pymysql://root:123456@127.0.0.1:3306/flask_test’
2. Sqlite连接
app.config[‘SQLALCHEMY_ DATABASE_ URI’]= DB URI
aDD.configI’SQLALCHEMY_ TRAKE_ MODIFICATIONS’]=False 禁止对象追踪修改
SQLite数据库连接不需要额外驱动,也不需要用户名和密码
SQLite连接的URI:DB_ URI = sglite:///sqlite3.db
第三节 ORM字段类型
常用字段: | Smalllnteger | BigInteger | Float |
---|---|---|---|
Numeric | String | Text | Unicode |
Unicode Text | Boolean | Date | Time |
DateTime | Interval | LargeBinary |
- 初始化:python manage.py db init
- 升级:python manage.py db upgrade
- 降级回退:python manage.py db downgrade
- 生成迁移文件:python manage.py db migrate
- 生成迁移数据库前要看一下模型类,有没有注册到views文件中。from App.models import models, User
- models.create_all()创建表, models.drop_all()删除表
- 常用约束
- primary key autoincrement unique index
- nullable default ForeignKey()
1. 继承自己的定义的模型类
- 表名: _tablename
- 模型继承
- 默认继承并不会报错,它会将多个模型的数据映射到一张表中,导致数据混乱,不能满足基本使用
- 抽象的模型是不会在数据库中产性映射的: abstract =True
- 文档
- flask-sqlalchemy
- sqlalchemy
- 实际案例
# 会员数据模型
# 修改完模型后:python manage.py db migrate
# 修改完模型后:python manage.py db upgrade
class User(models.Model):
# 修改表名
__tablename__ = 'UserModel'
id = models.Column(models.Integer, primary_key=True) # 编号
username = models.Column(models.String(100), unique=True) # 昵称
password = models.Column(models.String(100)) # 密码
desc = models.Column(models.String(128), nullable=True)
- 如果继承类,只生成一张Animal表。不生成dog和cat表。dog和cat的字段集成在Animal表中。如果对cat和dog表添加数据。一些字段会默认赋值,数据就混乱了。解决方法见6.
# 如果继承类,只生成一张Animal表。不生成dog和cat表。dog和cat的字段集成在Animal表中。
class Animal(models.Model):
id = models.Column(models.Integer, primary_key=True)
u_name = models.Column(models.String(100), unique=True)
class Dog(Animal):
d_tags = models.Column(models.Integer, default=4)
class Cat(Animal):
c_tags = models.Column(models.String(32), default='fish')
- 降级表,把Animal变成抽象表。然后重新生成表结构。发现生成dog表和cat表
# 降级表:1. python manage.py db downgrade
# 降级表:2. 删除对应的表py文件
# 降级表:3. python manage.py db migrate
# 降级表:4. python manage.py db upgrade
class Animal(models.Model):
# Django 中可以把类变成抽象类处理,这里也把类变为抽象类
__abstract__= True
id = models.Column(models.Integer, primary_key=True)
u_name = models.Column(models.String(100)