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 语法总结的更多相关文章

  1. flask SQLAlchemy中一对多的关系实现

    SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...

  2. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  3. 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 ...

  4. Flask – SQLAlchemy成员增加

    目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...

  5. flask之SQLAlchemy语法和原生mysql语法

    作为一个程序员,我想把有限的大脑空间留给有价值的知识,本人偏向于原生语法 特随笔于易查阅 # -*- encoding: utf-8 -*- from flask import Flask,rende ...

  6. Python利用flask sqlalchemy实现分页效果

    Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...

  7. Flask+SQLAlchemy+alembic+Flask-RESTful使用

    前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...

  8. flask SQLALchemy外键及约束

    from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...

  9. python3 + flask + sqlalchemy +orm(3):多对多关系

    一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...

  10. python3 + flask + sqlalchemy +orm(2):数据库中添加表

    往数据库中添加一张保存文章的表,表明为article,字段有id,title,content 同样一个配置文件:config.py DEBUG = True #dialect+driver://roo ...

随机推荐

  1. Java:构造代码块,静态代码块

    本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可 ...

  2. vue.js的安装

    使用nodejs安装Vue-cli 1.安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(npm install --gl ...

  3. sql语句进阶教程

    转载自:http://blog.csdn.net/u011001084/article/details/51318434 最近从图书馆借了本介绍SQL的书,打算复习一下基本语法,记录一下笔记,整理一下 ...

  4. Linux 内存池【转】

    内存池(Memery Pool)技术是在真正使用内存之前,先申请分配一定数量的.大小相等(一般情况下)的内存块留作备用.当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存 ...

  5. nginx基础知识总结

    1.nginx的工作模式 master/worker工作模式: 一个master进程: 负载加载和分析配置文件.管理worker进程.平滑重启升级等. 一个或多个worker进程 处理并响应用户请求 ...

  6. Nginx安装成Windows服务

    因为有项目使用Nginx来做负载均衡,但是Nginx的Windows版本是不提供安装成服务的,所以服务器重启后Nginx并不会伴随启动和恢复.网上查了下,这里记录下解决方法,防止遗忘. 第一步:下载W ...

  7. kafka 配置文件参数详解

    kafka的配置分为 broker.producter.consumer三个不同的配置 一 BROKER 的全局配置 最为核心的三个配置 broker.id.log.dir.zookeeper.con ...

  8. Python进阶(二)

    高阶函数 1.把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 2.Python内建了map( )和reduce( ) 函数 map()函数接收两个参数,一个是函数 ...

  9. 搜索插入位置的golang实现

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 输入: [,,,], 输出: 输入: [,,,] ...

  10. 【转】struct和typedef struct在C/C++中的区别

    分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...