轻量级web框架 Flask 05

1.模型 - Models
  1. 定义模型
    模型:根据数据库中表结构创建出来的类(模型类,实体类)
    1. 语法:
      class ModelName(db.model):
      __ tablename__ = ‘TableName’
      CloumnName = db.column(db.Type,options)
      1. Midelname: 定义模型类的名称,根据表名设定。
      2. TableName:映射数据库表名
      3. CloumnName: 属性名,映射到数据路就是列名
      4. Type:映射到列的数据类型
      5. Options:列选项

db.type 列类型如下:

类型名Python类型说明
Integerint普通整数,32位
SmallIntegerint小范围证书,16位
BigIntegerint Or Long不限精度整数
Floatfloat浮点数
Numericdecimal.Decimal定点数
Stringstr字符串
textstr字符串
Booleanbool布尔值
Datedatatime.Date日期
Timedatatime.time时间
DateTimedatetime.datetime日期时间

Options 列选项

选项名说明
autoincrement是否设置该列自增长,整数主键默认自增长
primary_key是否设置该列为主键
unique是否设置列值唯一
index是否加索引
nullable表示该列可为空
default指定该列的默认值
  • 注:如果一个列中要包含多个列选项使用都好隔开,列选项与列类型之间使用,隔开。

    1. db.create_all()
      作用:
      将所有的实体类都创建到数据库上
      注意:
      只有类不存在才会创建,存在则忽略
    2. db.drop_all()
      作用:
      将所有数据表全部删除
2.数据迁移
  1. 模型类的映射管理
    1. 什么是映射管理
      对模型类/实体类的修改允许再映射回数据库
    2. 依托于第三方库完成管理
      包:flask-script
      类:manager
      作用:对项目进行管理
      包:flask-migrate
      类:
      1. Migrate:
      作用:用户管理app 和db之间协调关系
      2. MigrateCommand
      作用:允许终端中提供实体类的命令
    3. 实现数据库的迁移
      1. python3 03.run01.py db init
        作用:做一些初始化的行为操作
        特点:一个项目中执行一次就够了
      2. python3 run01.py db migrate
        作用:将编写好的实体类生成中间文件
        特点:只要检测到实体类有修改,就会生成中间件文件
      3. python3 run01.py db upgrade
        作用:将中间文件映射回 数据库
  2. ORM中的CRUD
    1. 增加 - C(Create)
      1. 创建实体对象,并为属性赋值
        user = User()
        user.uname = ‘xiaokele’
        user.age = 6
      2. 将实体对象增加回数据库
        db.sesion.add(实体对象)
        # 针对非查询操作,必须手动提交回数据库
        db.session.commit()
      3. 配置操作自动提交
        针对所有非查询操作
        配置成功后,会在执行万试图之后,整体行为提交回数据库、
        app.config[‘SQLALCHEMY_COMMIT_ON_TEAROWN’] = True
    2. 查询 - R(Retrieve)
      1. 基于Session.querry() 进行查询
        1. db.session.query()
          该函数会返回一个Query对象类型为BaseQuery该返回值中会包含针对某一个实体或实体中的所有查询操作
          语法:
          1. db.session.query(实体类)
          查询对应实体所有列的数据
          2. db.session.query(实体类.属性一)
          查询对应实体类中部分列的数据
        2. 查询执行函数:
          db.session.query().查询执行函数
          all() 以列表形式返回query()中所有数据
          first() 以实体对象返回第一条数据
          first_or_404() 效果同上
from flask import Flaskfrom 
flask_sqlalchemy import SQLAlchemyfrom 
flask_script import Managerfrom 
flask_migrate import Migrate,MigrateCommand

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+pymysql://root:123456@localhost:3306/flask05'
# 配置app启动模式为调试模式
app.config['DEBUG'] = True
# 关闭信号追踪
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 配置自动提交
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

db = SQLAlchemy(app)

# 创建manager对象制定管理对象
manager = Manager(app)
# 创建Migrate对象 并制定药罐练得app和dbmigrate = Migrate(app,db)
# 为Manager增加命令允许数据迁移
manager.add_command('db',MigrateCommand)
# 创建实体类class User(db.Model):
    __tablename__ = 'user'
        id = db.Column(db.Integer,primary_key=True)   
         uname = db.Column(db.String(30))    
         uage = db.Column(db.Integer)    
         umail = db.Column(db.String(200))
    def __repr__(self): 
           return '<user:%r>'%self.uname

@app.route('/')
def hello_world():
    return 'Hello World!'
@app.route('/01-add')
def addUser():
    user = User()
    user.uname = 'xiaoxuebi'
    user.uage = 8
    user.umail = '123123@qq.com'
    db.session.add(user)
     # db.session.commit()
     return '数据提交成功!'

@app.route('/02-query')def query_views():
# 测试db.session   
 #query = db.session.query(User)   
  # 测试查询执行函数    
  # query = db.session.query(User).all()    
  # for x in query:    
  #     print('id:%d,uname:%s,uage:%d,umail:%s'%(x.id,x.uname,x.uage,x.umail))    
  # return '<script>alert("查询成功")</script>'    
  x = db.session.query(User).first()    
  print('id:%d,uname:%s,uage:%d,umail:%s'%(x.id,x.uname,x.uage,x.umail))    
  return '<script>alert("查询成功")</script>'


if __name__ == '__main__':    
	# 通过manager管理启动程序   
	 manager.run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值