flask的orm操作
django是有orm操作的 可想而知 那么flask也是有orm操作的,其实flask的orm操作的使用和djnago的是差不多的
django的orm操作进行条件筛选的时候后面跟着的是objects
django
表名.objects.语句
flask的是query
表名.objects.语句 eg:
django:
User.objects.filter(条件).first
flask:
User.query.filter_by(条件).first
常用查询语句:
all() 查询所有 filter_by / filter 单个查询
filter_by 不需要指定是哪个类的哪个属性,只需要制定属性及其目标值就可以了, 并且只能写具体的值不能写模糊值
filter filter中指定查询条件的时候需要指定类名的前缀。可以指定模糊值 order_by 排序
查询集
- 原始查询集
类名.query得到的结果就为原始查询集
- 数据查询集
加上各种的过滤器的方法 最终返回的结果 为数据查询集 都使用数据查询集
过滤器
(1) all 查询所有 以列表形式返回 不支持连贯操作
类名.query.all()
User.query.all() # 查询User表中的所有数据
(2) filter() 过滤
类名.query.filter([类名.属性名 条件操作符 值])
User.query.filter() #返回所有 User.query.filter(User.age>) #查询年龄大于20的数据 User.query.filter(User.age>,User.age<) #查询年龄大于20的数据 and 小于40
(3) filter_by 只支持参数为关键字参数
类名.query.filter_by(属性名=值...)
data = User.query.filter_by(id=) data = User.query.filter_by(id>) #错误写法 不可以使用模糊查到 data = User.query.filter_by(id=,age=)
(4) offset 偏移量
offset(num)
User.query.filter().offset()
(5) limit 取值
limit(num)
User.query.filter(User.age>).limit() 查到的结果只取两个
(6) offset和limit组合使用
User.query.offset().limit() 也是只取两个
(7) order_by() 排序
默认是升序
data = User.query.order_by(User.age) #升序
data = User.query.order_by(-User.age) #降序
(8) first 取出第一条数据 返回对象
User.query.first() == User.query.get()
(9) get 获取id对应的数据
查询成功返回对象 查询失败 返回None
User.query.get()
(10) contains 包含关系
User.query.filter(User.username.contains('')) #username中包含数字7的数据
(11) like 模糊查询
User.query.filter(User.username.like('李%')) #以李作为开头的
(12) startswith endswith 以...开头 以...结尾
User.query.filter(User.username.startswith('李')) # 以姓李的开头
User.query.filter(User.username.endswith('')) # 以6为结尾的
(13) 比较运算符
__gt____ge____lt____le__><>=<===!=
.
(14) in 和 not in
User.query.filter(User.age.in_([,,,,,]))
(15) is null
User.query.filter(User.username.isnot(None))
(16) and_
多个条件 用逗号隔开,为and操作
from sqlalchemy import and_
User.query.filter(and_(User.age==,User.id==))
(17) or_
from sqlalchemy import or_
@main.route('/and/')
def myAnd():
data = User.query.filter(or_(User.age==,User.id==))
data = User.query.filter(and_(User.username.like('%6%')),or_(User.age>=,User.id==))
return render_template('show.html',data=data)
(18) not_
from sqlalchemy import not_
@main.route('/and/')
def myAnd():
# data = User.query.filter(not_(User.age>,User.id==))\
#错误写法只能给一个条件取反
data = User.query.filter(not_(User.age>))
return render_template('show.html',data=data)
(19) count 统计
data = User.query.filter(not_(User.age>)).count()
四、文件的迁移
模块:
pip install flask-migrate pip install flask-script
使用
(1) 实例化
from flask_migrate import Migrate,MigrateCommand
from flask_sqlalchemy import SQLalchemy
app = Flask(__name__)
db = SQLalchemy(app)
migrate = Migrate(app,db=db)
manager = Manager(app)
manager.add_command('db',MigrateCommand)
(2) 初始化 迁移文件目录
python manage.py db init
(3) 生成迁移文件
python manage.py db migrate
(4) 执行迁移文件
python manage.py db upgrade
注意
如果当前存在 模型 但是执行创建迁移文件的时候 提示没有任何改变的时候 需要查看当前的模型类是否有使用(导入)
flask的orm操作的更多相关文章
- flask 中orm关系映射 sqlalchemy的查询
flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询 一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课 ...
- flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询
一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- Django中ORM操作
ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...
- Django的ORM操作
ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...
- python 外键用法 多对多关系 ORM操作 模板相关
一.app/models中写类(设计表结构) 1.普通类 class A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...
- Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- Django之ORM操作(聚合 分组、F Q)
Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作. 键的名 ...
随机推荐
- 简述C和C++的学习历程
总是被问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复. 一家之言,欢迎拍砖哈. 1.可以考虑先学习C. 大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望 ...
- 修改ASP.NET文件上传大小限制
转自:http://www.hello-code.com/blog/asp.net/201603/5954.html 要点: 1.web.config中的<httpRuntime maxRequ ...
- HTML&&css面试题
HTML&css相关问题 1.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XMl的置标语言 最主要的不同 XHTML元素必须被正确地嵌套. XH ...
- [转]一步步学习EF Core(2.事务与日志)
本文转自:http://www.cnblogs.com/GuZhenYin/p/6862505.html 上节我们留了一个问题,为什么EF Core中,我们加载班级,数据并不会出来 其实答案很简单,~ ...
- IE浏览器TAB清空设置
1.Regedit 2.HKEY_USERS——搜索NewTabPage 3.清空除了Default之外的所有东西 4.也可以添加NumRows——TAB的行数 可以参考:http://tieba.b ...
- Session和Cookie之间区别与联系
一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,W ...
- iOS调用系统页面中文显示
在开发的过程中,我们会接入很多的sdk,比如相机,相册,是否允许获取位置等,大多数的情况下是默认显示英文, 在plist文件里面添加一个key就可以了,如下图: key:Localization na ...
- xmpp实现的即时通讯聊天(一)
参考网址:http://www.jianshu.com/p/b401ad6ba1a7 http://www.jianshu.com/p/4edbae55a07f 一.mysql和openfire环境的 ...
- [C#]INI文件控制类
INI文件常用于保存各类设置或本地化文本,大概格式如下: [Section] key=value 然而.NET框架似乎并没有提供一个实用的工具来操作它,或许是因为MS想让我们都使用Settings类控 ...
- [IDE]快捷键整理
VS Resharper eclipse 备注 运行 Ctrl+F5 - Ctrl+F11 调试 F5 - F11 逐语句执行 F11 - F5 IE.FF: F11 逐过程执行 F10 ...