python3 flask sqlalchemy 数据库操作
数据的查询
all():查询全部的数据,其结果是一个列表,每一个元素都是一个对象students = Student.query.all()过滤查询:第一种:filter,结果是baseQuery objects,过滤条件的格式:对象.属性==值studnets = Student.query.filter(Student.id==1)第二种:filter_by,结果是baseQuery objects,可以进行遍历students = Student.query.filter_by(id=1)第三种:原生sql查询id=1的信息,结果是一个可以遍历的对象sql = 'select * from student where id=1;'students = db.session.execute(sql)模糊查询:语法:filter(模型名.属性.运算符('xx'))运算符:contains:包含startswith:以什么开始endswith:以什么结束in_:在范围内like:模糊__gt__: 大于__ge__:大于等于__lt__:小于__le__:小于等于例子:
# 模糊查询,查询姓名中包含小花的学生信息
# django中filter(s_name__contains='小花')students = Student.query.filter(Student.s_name.contains('小花'))# 以什么开始students = Student.query.filter(Student.s_name.startswith('小'))# 以什么结束students = Student.query.filter(Student.s_name.endswith('1'))# 查询年龄大于等于16的学生信息students = Student.query.filter(Student.s_age.__gt__(15))# 查询id在10到20之间的学生的学生信息students = Student.query.filter(Student.s_age.in_([10,11,12]))# 查询年龄小于17的学生信息Student.query.filter(Student.s_age < 17)students = Student.query.filter(Student.s_age.__lt__(17))# 模糊查询,使用like,查询姓名中第二位为花的学生信息
# like '_花%',_代表必须有一个数据,%任何数据students = Student.query.filter(Student.s_name.like('_花%'))筛选:offset()# 跳过3个数据stus = Student.query.offset(3)limit()# 跳过3个数据,查询5个信息stus = Student.query.offset(3).limit(5)order_by()# 按照id降序,升序students = Student.query.order_by('id')students = Student.query.order_by('-id')students = Student.query.order_by(desc('id'))students = Student.query.order_by(asc('id'))students = Student.query.order_by('id desc')students = Student.query.order_by('id asc')get()#使用get,获取id=1的学生对象,get()默认接收id# 拿不到值不会报错,返回空students = Student.query.get(4)first()# 获取年龄最大的一个stus = Student.query.order_by('-s_age').first()逻辑运算与and_filter(and_(条件),条件…)或or_filter(or_(条件),条件…)非not_filter(not_(条件),条件…)例子:
and_ students = Student.query.filter(Student.s_age==16,Student.s_name.contains('花'))students = Student.query.filter(and_(Student.s_age==16,Student.s_name.contains('花')))not_students = Student.query.filter(or_(Student.s_age==16,Student.s_name.contains('花')))
or_students = Student.query.filter(not_(Student.s_age==16),Student.s_name.contains('花'))注意:
1. fliter和filter_by的结果可遍历
2. 可以通过对其结果使用all()方法将其转换成一个列表或者first()转换成objects对象。
3. all()获得的是列表,列表没有first()方法
4. fliter和filter_by有flrst()方法,没有last方法
数据的添加
在flask中修改数据后需要添加事务和提交事务
事务: 完整,一致,持久,原子
第一种:保存数据
将数据放入缓存
db.session.add(stu)
将缓存中的数据提交
db.session.commit()
在学生表中添加数据
@blue.route('/createstu/')
def create_stu():s = Student()s.s_name = '小花's.s_age = 19db.session.add(s)db.session.commit()return '添加成功'提交事务,使用commit提交我们的添加数据的操作
批量创建数据
批量添加数据时可以使用add()、add_list()添加事务
add():db.session.add_all(stu)db.session.commit()
stu是一个对象add_list():db.session.add_all(stus_list)db.session.commit()
stus_list是一个列表,其每个元素都是一个对象
第一种
@app_blue.route('create_many_stu/',methods=['GET'])
def create_many_stu():
if request.method == 'GET':stu = Student()stus_list = []for i in range(5):stu = Student()stu.s_name = '小花%s' % random.randrange(10, 1000)stu.s_age = random.randint(10,20)stus_list.append(stu)db.session.add_all(stus_list)db.session.commit()# db.session.add(stu)# db.session.commitreturn '批量创建'db.session.add_all(stus_list)
db.session.commit()
将列表中的数据统一添加到缓存区中,并提交
第二种
第二种:重写initmodels中:def __init__(self, name, age):# 2,给对象赋值self.s_name = nameself.s_age = ageviews中:
@app_blue.route('create_many_stu_init/',methods=['GET'])
def create_many_stu():if request.method == 'GET':stus_list = []for i in range(5):stu = Student('小花%s' % random.randrange(10,1000), random.randint(10,20))stus_list.append(stu)db.session.add_all(stus_list)db.session.commit()# db.session.add(stu)# db.session.commitreturn '批量创建成功'
修改数据
思路:获取到需要修改的对象,通过对象.属性的方式将属性重新赋值,然后使用commit提交事务
写法1
students = Student.query.filter_by(s_id=3).first()students.s_name = '哈哈'db.session.commit()
写法2
students = Student.query.filter_by(s_id=1).all()
db.session.delete(students[0])
db.session.commit()
删除数据
格式:db.session.delete(对象)db.session.commit()注意:在修改数据(增删改)中如果使用commit()的话,只会修改本地缓存中的数据,数据库中的数据不会更新。
必须使用:db.session.commit()
写法1
students = Student.query.filter_by(s_id=2).first()
db.session.delete(students)
db.session.commit()
写法2
students = Student.query.filter_by(s_id=1).all()
db.session.delete(students[0])
db.session.commit()
模型
和Django的区别:a. 模型中不定义数据库的表名:在django中默认表名为:'应用appming_模型名小写'在flask中默认的表名为:模型名的小写b. 主键自增字段:django中会默认创建自增的主键idflask中需要手动创建自增的id: id = db.Column(db.Integer, primary_key=True, autoincrement=True)c.查询所有数据的结果all()在django结果中查询的结果是QuerySet在flask中查询结果是Listd.查询满足条件的数据的结果,filter()在django查询结果是QuerySet在flask中查询结果是baseQuery objects
python3 flask sqlalchemy 数据库操作相关推荐
- mysql flaskalchemy_python flask sqlalchemy 数据库mysql操作
第一步app.py: # coding=utf-8 import urllib from flask import Flask from werkzeug.routing import BaseCon ...
- python SQLAlchemy数据库操作
文章目录 1 增 2 删 3 改 4 基础查询 4.1 基础查询汇总 4.2 限制查询 4.3 计数 4.4 去重 4.5 排序 4.6 模糊查询 4.7 分组查询 4.8 聚合函数 5 多表查询 5 ...
- Flask使用Flask-SQLAlchemy操作MySQL数据库
https://www.jianshu.com/p/6ae0d30a5539 前言: Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作.SQ ...
- python学习之flask sqlalchemy介绍和使用 表操作增删查改
flask sqlalchemy介绍和使用 表操作增删查改 内容详细 1 sqlalchemy介绍和快速使用 1.1 介绍 # SQLAlchemy是一个基于Python实现的ORM框架# djang ...
- python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解
本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...
- 【建议收藏】Flask系列教程(三)SQLAlchemy数据库
数据库是一个网站的基础,在Flask中可以自由的使用MySQL.PostgreSQL.SQLite.Redis.MongoDB来写原生的语句实现功能,也可以使用更高级别的数据库抽象方式,如SQLAlc ...
- Flask ORM SQLAlchemy数据操作完整案例
ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数据的映射. 比如:把数据库表中每条记录映射为一个模型对象 优点 只需要面 ...
- flask 数据库操作入门教程(一把梭)
flask 数据库操作入门 安装数据库 mysql8.0 下载后一直点击下一步,设置好root密码 安装模块 pip install flask_sqlalchemy 连接数据库 还需要自己创建一个数 ...
- Python的数据库操作(Sqlalchemy)
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...
最新文章
- isinstance函数和@staticmethod用法
- abap中取内表中每一类中的一行的方法
- python人工智能——深度学习——TensorFlow基本介绍
- Java动态代理的两种实现方法
- Springboot应用中线程池配置教程(2021版)
- leetcode力扣23.括号生成
- 程序员 520 脱单指南!
- 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题
- 使用foobar2000批量修改视频封面,批量修改artist/album
- MAC下maven本地仓库配置
- 【转载】设备\Device\Harddisk0\D 有一个不正确的区块
- PNP和NPN三极管区别
- java 调用存储过程无反应_java调用存储过程无法取得返回参数
- 学习天才犹太人的经商法则
- 星际迷航的William Shatner发推文支持Vitalik Buterin
- win11什么时候发布的_2019年8月证券从业资格考试报名通知什么时候发布?
- XJTU_ 西安交通大学2020大学计算机作业-第六周
- Word之页眉和页脚设置(一)
- 罗振宇2021跨年演讲7:2060“碳中和”跟你有多大关系?
- hdmi接口线_HDMI接口如何区分?