第四课 Flask数据模型Model

Flask 第四课Flask数据模型Model

tags:

  • Flask
  • 2019千锋教育

categories:

  • flask
  • model
  • 数据模型
  • flask-caching

第一节 flask的模型

Flask默认并没有提供任何数据库操作的API,我们可以选择任何适合自己项目的数据库来使用Flask中可以自己的选择数据,用原生语句实现功能,也可以选择ORM ( SQLAIchemy,MongoEngine)

  1. 原生SQL缺点
    • 代码利用率低,条件复杂代码语句越长,有很多相似语句
    • 一些SQL是在业务逻辑中拼出来的,修改需要了解业务逻辑
    • 直接写SQL容易忽视SQL问题
  2. 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
  1. 初始化:python manage.py db init
  2. 升级:python manage.py db upgrade
  3. 降级回退:python manage.py db downgrade
  4. 生成迁移文件:python manage.py db migrate
  5. 生成迁移数据库前要看一下模型类,有没有注册到views文件中。from App.models import models, User
  6. models.create_all()创建表, models.drop_all()删除表
  7. 常用约束
    • primary key autoincrement unique index
    • nullable default ForeignKey()

1. 继承自己的定义的模型类

  1. 表名: _tablename
  2. 模型继承
    • 默认继承并不会报错,它会将多个模型的数据映射到一张表中,导致数据混乱,不能满足基本使用
    • 抽象的模型是不会在数据库中产性映射的: abstract =True
  3. 文档
    • flask-sqlalchemy
    • sqlalchemy
  4. 实际案例
# 会员数据模型
# 修改完模型后: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)
  1. 如果继承类,只生成一张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')
  1. 降级表,把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)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值