flask框架转载

一、请求钩子

  1. https://blog.csdn.net/hyman_c/article/details/53558134

二、Flask上下文

  1. https://www.bilibili.com/video/av43295577/?p=24

三、模板过滤器和自定义过滤器

  1. https://blog.csdn.net/fanlei5458/article/details/80341278

四、模板宏

  1. 定义宏

    {% macro input() %}
      <input type="text"
             name="username"
             value=""
             size="30"/>
    {% endmacro %}
    
  2. 调用宏

    {{ input() }}
    
  3. 定义带参数的宏

    {% macro input(name,value='',type='text',size=20) %}
        <input type="{{ type }}"
               name="{{ name }}"
               value="{{ value }}"
               size="{{ size }}"/>
    {% endmacro %}
    
  4. 调用带参数的模板宏

    {{ input(value='name',type='password',size=40)}}
    
  5. 把宏单独抽取出来,封装成html文件,其它模板中导入使用
    文件名可以自定义macro.html

    {% macro function() %}
    
        <input type="text" name="username" placeholde="Username">
        <input type="password" name="password" placeholde="Password">
        <input type="submit">
    {% endmacro %}
    
  6. 在其它模板文件中先导入,再调用

    {% import 'macro.html' as func %}
    {% func.function() %}
    

五、模板的闪现

  1. https://www.cnblogs.com/xiaxiaoxu/p/10468103.html

六、使用SQLAlchemy的配置

  1. 安装SQLAlchemy

    1.安装SQLAlchemy
    	pip3 install sqlalchemy
    2.Flask中需要使用flask-sqlalchemy支持包
    	pip3 install flask-sqlalchemy
    
  2. app.config[‘SQLALCHEMY_DATABASE_URI’]=“mysql://用户名:密码@数据库服务器地址:端口号/数据库名称”

    app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@127.0.0.1:3306/flaskDB'
    
  3. 设置SQLAlchemy自动跟踪数据库

    看需求设置True和False
    app.config['SQLALCHEMY_TRACE_MODIFICATIONS'] = False
    

七、创建模型类

  1. 语法

    class MODELNAME(DB.Model):
    				__tablename__ = "TABLENAME"
    				COLUMN_NAME = db.Column(db.TYPE,OPTIONS)
    
  2. db.type类型

  3. db.TYPE 列类型:

     类型名		数据库		python		说明
     Integer		int			int
     Float		float		float
     Numeric		numeric		Decimal		定点数
     String		varchar		str
     Text		text		str
     Boolean		tinyint		bool
     Date		date		datetime.date
     DateTime	datetime	datetime.datetime`
     
     OPTIOINS		列选项
     		选项名				说明
     		autoincrement		如果取值为true,则自动增长
     			注意:	如果列类型为整数,并且是主键的话,默认就是自增长的
     		primary_key		如果取值为true表示该列为主键
     		unique			如果取值为true表示该列唯一
     		index			如果取值为true表示该列加索引
     		nullable		如果取值为true表示该列可为空
     		default			指定该列默认值
    
  4. 数据迁移

    1.什么是数据库迁移?
    	将实体类的改动在映射回数据库。
    2.依赖于第三方库。
    	1.flask-script
    		安装:pip3 install flask-script
    		包:flask_script
    		类:Manager
    		作用,对项目进行管理。
    			启动项目,为项目增加管理指令。
    2.flask-migrate
    	安装:pip3 install flask-migrate
    	包:flask_migrate
    	类:
    		1.Migrate
    			作用:协调app和db 之间的关系
    		2.MigrateCommand
    			作用:在终端中提供实体类迁移的指令
    3.python3 flaskDB.py db
    	1.init
    		作用:执行项目和数据库的初始化操作
    		特点:一个项目中只执行一次即可
    	2.migrate
    		作用:将编辑好的实体类生成一个中间文件并保存
    		特点:只要检测到实体类有更改,就会生成中间文件。
    	3.upgrade
    		作用:将中间文件映射会数据库
    
  5. 数据库的CRUD

    1. 增加
      1. 创建实体类对象,并为对象的属性赋值

        user = Users()
        				user.username = "xxxx"
        				user.age = 30
        				user.isActive = True
        				user.birthday = "1980-10-12"
        
      2. 将实体对象保存回数据库

        db.session.add(user)  #增加数据
        db.session.commit()		#提交事务
        
    2. 查询
1.基于  db.session  进行查询
	1.db.session.query()
	参数:
		要查询的列,如果查询多个列的话使用,隔开,如果要查询所有列,参数为实体类名

		示例:
			1.查询User实体类中的id,username
				db.session.query(Users.id,Users.username)
			2.查询Users实体类中所有的类
				db.session.query(Users)
			3.查询Users以及Wife实体类所有的列
				db.session.query(Users,Wife)
	返回值:
		返回一个Query对象,类型为BaseQuery
	
	2.查询执行函数
		作用:在query的基础上得到最终的查询结果
		语法:db.session.query(XXX).查询执行函数()
		1.all()
			以列表的方式返回所有数据
		2.first()
			以实体对象的方式返回第一条数据
			没有查询到数据返回None
		3.first_or_404()
			效果同上
			没有查询到结果则相应404
		4.count()
			返回查询结果的数量
	3.查询过滤器函数
		作用:在db.session.query()追加条件
		语法:db.session.query(XX).过滤器函数().执行函数()
		1.filter()
			各种查询条件均可实现  where
		2.filter_by()
			只做等值条件判断
			语法:db.session.query(xxx).filter_by(属性=值).all()
			示例:
				查询Users中id=2的用户信息
				db.session.query(Users).filter_by(id=2).all()
		3.limit()
			获取限定函数
			示例:获取Users中前两条数据
				db.session.query(Users).limit(2).all()
		4.offset()
			指定结果的偏移量
			示例:获取Users中跳过前两条数据的剩余数量
				db.session.query(Users).offset(2)

查询过滤器

1.查询过滤器方法
	1.filter()
		1. filter(实体类.属性 == 值)
		2. filter(实体类.属性 > 值)
		3. filter(条件1,条件2)
		   filter(条件1).filter(条件2)
		4. filter(or_(条件1,条件2))
		5. filter(实体类.属性.like('%xx%'))
		6. filter(实体类.属性.in_([值1,值2]))
		7. filter(实体类.属性.between(数值1,数值2))
2.filter_by(属性=值)
3.limit(n) & offset(n)

order_by()

作用:排序
	语法:db.session.query(XXX).order_by("排序规则")
	示例:
		1.Users实体中所有的数据按年龄降序排序
		  select * from users order by age desc
			db.session.query(Users).order_by("age desc")
		2.Users实体中所有的数据先按年龄降序排序,再按id升序排序
			select * from users order by age desc,id asc

			db.session.query(Users).order_by("age desc,id")
		3.Users实体中查询出年龄大于18的按age倒序排
			
			db.session.query(Users)
				.filter(Users.age>18)
				.order_by("age desc")
				.all()

聚合查询

1.基本的聚合查询
	1.聚合函数
		from sqlalchemy import func
		#func中提供了所有的聚合函数
		聚合函数:
			sum() : func.sum()
			count() :
			max() :
			min() :
			avg() :
	2.语法
		db.session
			.query(
				func.聚合函数(实体类.属性),
				func.聚合函数(实体类.属性)
			).all()
2.分组聚合查询
	db.session.query(查询列,聚合列)
		.filter(条件) #分组前数据筛选 - where
		.group_by('分组列名') #分组 - group by
		.having(条件) #分组后筛选 - having
	示例:
		查询users表中年龄大于18岁的,按照isActive分组,组内人数大于2人的组名和人数查询出来

		db.session.query(
			Users.isActive,
			func.count(Users.id)
		).filter(Users.age > 18)
		 .group_by('isActive')
		 .having(
			func.count(Users.id) >= 2
		 )
  1. 修改

    1.查
    	查询出要修改的实体对象
    2.改
    	通过 对象.属性=值 修改数据
    3.保存
    	db.session.add(对象)
    
  2. 删除

    1.查
    	查询出要修改的实体对象
    2.删
    	db.session.delete(对象)
    
  3. 基于实体类的查询

语法:
	实体类.query.查询过滤器函数().查询执行函数()
示例:
	1.查询Users实体中所有的数据
		Users.query.all()
	2.查询Users实体中isActive为True的数据
		Users.query.filter_by(isActive=True).all()
		Users.query.filter(Users.isActive==True).all()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值