Flask-sqlalchemy 语法总结
Flask-sqlalchemy 语法总结
** DDL
db.create_all() :创建实体表
db.drop_all(): 删除表
1)插入表
Db.session.add(user) #user是实体对象
##批量插入
Db.session.add_all([user1,user2,user3,…..])
##提交
Db.session.commit()
2) 修改表
如果实体有id,那么就会变成更新操作,如果没有就是默认插入操作
User.name=’xiaobing’
Db.session.add(user)
Db.session.commit()
3)删除行
Db.session.delete(user)
Db.session.commit()
2,查询
1)filter_by,filter
User.query.filter_by(role=user_role).all()
user_role = Role.query.filter_by(name='User').first()
filter_by是直接根据实体对象去转化sql,filter是比较直接插入到sql中
常用的SQLALchemy查询过滤器
过滤器 说明:
* filter() 把过滤器添加到原查询上
* filter_by() 把等值过滤器添加到原查询上
* limit() 限制原查询返回的结果数量
* offset() 偏移原始查询返回的结果
* order_by() 根据指定条件对原查询进行排序
* group_by() 根据指定条件对原查询结果进行分组
在users = db.relationship('User', backref='role', lazy='dynamic') 加入了lazy=’dynamic’参数,从而禁止自动执行查询,user_role.users会返回一个尚未执行的查询,因此可以在其上添加过滤器
user_role.users.order_by(User.username).all()
最常用的SQLALCHEMY列选项
选项名 说明
primary_key 主键
unique 是否允许重复值
index 设为True,为这一 列建立索引
nullable 设为True,允许使用空
default 默认值
2)like 模糊匹配
例如:
categorys = Category.query.filter(Category.name.like("%"+keyword+"%")).all()
这种好像也可以
hosts.query.whoosh_search('ce').all()
3)连表查询
class Topic(db.Models):
__tablename__ = 'topic'
id = db.Column(db.Integer, primary_key = True)
content = db.Column(db.Text) class Reply(db.Models):
__tablename = 'reply'
id = db.Column(db.Integer, primary_key = True)
topic_id = db.Column(db.Integer)
content = db.Column(db.Text)
查询:
result=Reply.query.join(Topic, Reply.topic_id==Topic.id).add_entity(Topic).all()
然后遍历值:
for res in result:
res.Reply.xxx
res.Topic.xxx
4)查询返回指定的字段
User.query(User.name,User.email,User.sex).order(User.name.des()).limit().skip()
5)group by 分组查询
第一种方式:
rs =User.query(StudentInfo.cls, func.sum(StudentInfo.cert_count)).group_by(StudentInfo.cls).all()
第二种方式:
Create_engine=SQLAlchemy.get_engine()
sql = 'select cls, sum(cert_count) from stuinfo group by cls'
rs = engine.execute(sql)
for row in rs:
print row[], row[]
6) 分页显示paginate
pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['ARTISAN_POSTS_PER_PAGE'],error_out=False)
返回的pagination对象 包含以下:
Page:当前页
Page_per:每页显示多少条
Total:总条数
Flask-sqlalchemy 语法总结的更多相关文章
- flask SQLAlchemy中一对多的关系实现
SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...
- flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作
flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...
- flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')
error:flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specifie ...
- Flask – SQLAlchemy成员增加
目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...
- flask之SQLAlchemy语法和原生mysql语法
作为一个程序员,我想把有限的大脑空间留给有价值的知识,本人偏向于原生语法 特随笔于易查阅 # -*- encoding: utf-8 -*- from flask import Flask,rende ...
- Python利用flask sqlalchemy实现分页效果
Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...
- Flask+SQLAlchemy+alembic+Flask-RESTful使用
前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...
- flask SQLALchemy外键及约束
from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...
- python3 + flask + sqlalchemy +orm(3):多对多关系
一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...
- python3 + flask + sqlalchemy +orm(2):数据库中添加表
往数据库中添加一张保存文章的表,表明为article,字段有id,title,content 同样一个配置文件:config.py DEBUG = True #dialect+driver://roo ...
随机推荐
- c++面向对象学习计划
面向对象自学计划 视频学习计划 计划:每天观看至少两个视频,到开学时差不多完成视频的学习. 进度:已学习12个视频. C的强化与补漏 C语言不熟悉的知识点:数组,结构体,链表,文件 -----已重新学 ...
- 3.网络编程-tcp的服务器简单实现
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/13 22:03 # @Author : ChenAdong # @ema ...
- Spark性能优化(基于Spark 1.x)
Task优化: 1.慢任务的性能优化:可以考虑减少每个Partition处理的数据量,同时建议开启spark.speculation(慢任务推导,当检测的慢任务时,会同步开启相同的新任务,谁先完 ...
- python中strip()方法学习笔记
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 当使用strip('xxx'),只要字符串头尾有"xxx"中的一个,就会去掉,而不是符合字符串''x ...
- 在c/c++中调用Java方法
JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活的使用. 通过使用JNI可 ...
- [20170625]12c Extended statistics.txt
[20170625]12c Extended statistics.txt --//别人的系统12c,awr报表出现大量调用执行如下sql语句.select default$ from col$ wh ...
- 洗礼灵魂,修炼python(53)--爬虫篇—urllib模块
urllib 1.简介: urllib 模块是python的最基础的爬虫模块,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象.urllib 支持各种 web 协议,例如 ...
- 第五章 绘图基础(LINEDEMO)
LINEDEMO程序绘制一个矩形.两条直线.一个椭圆和一个圆角矩形.该程序表明,定义了封闭矩形的这些函数确实对这些区域进行了填充,因为椭圆后面的线被隐藏了. /*------------------- ...
- Pandas:让你像写SQL一样做数据分析
1. 引言 Pandas是一个开源的Python数据分析库.Pandas把结构化数据分为了三类: Series,1维序列,可视作为没有column名的.只有一个column的DataFrame: Da ...
- log4.net 配置-控制台输出带颜色的日志
一般对控制台输入的日志我们使用的 Appender 为 ConsoleAppender ,日志为白色文字. 当我们想到 DEBUG,INFO,WARN,ERROR 每种日志设置一种颜色时我们需要将 ...