Sqlalchemy ORM操作归类

#简单查询

#注意User是一个类对象,user_table是数据库中的表

#session = sessionmaker() #创建了一个自己定义了的 Session类

1.      session.query(User).all()

session.query(User).first()#
记录不存在时,first()
会返回 None

session.query(User).one()#用于获取全部元素,假设没有获得结果或者返回了多个结果,则会产生一个 error

session.query(User).count()#计数

session.query(User).scalar()#返回列表和标量

2.      session.query(User).limit(2).all()#最多返回两条数据

session.query(User).offset(3).all()#从第4条数据開始

session.query(User).order_by(User.name).all()#排序

session.query(User).order_by('name').all()

session.query(User).order_by(User.name.desc()).all()

session.query(User).order_by('name desc').all()

3.      filter/ filter_by过滤

equals:

session.query(User).filter(User.name == 'ed')

not equals:

session.query(User).filter(User.name != 'ed')

LIKE:

session.query(User).filter(User.name.like('%ed%'))

IN:

session.query(User).filter(User.name.in_(['ed', 'wendy', 'jack']))

# 能够和 query 对象协同工作:

session.query(User).filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))))

NOT IN:

session.query(User).filter(~User.name.in_(['ed', 'wendy', 'jack']))

IS NULL:

session.query(User).filter(User.name == None)

IS NOT NULL:

filter(User.name != None)

AND:

from sqlalchemy import and_

session.query(User).filter(and_(User.name == 'ed', User.fullname =='Ed Jones'))

# 或者连续调用 filter()/filter_by()两次

session.query(User).filter(User.name == 'ed').filter(User.fullname== 'Ed Jones')

OR:

from sqlalchemy import or_

session.query(User).filter(or_(User.name == 'ed', User.name =='wendy'))

match:

session.query(User).filter(User.name.match('wendy'))

match 的參数内容由数据库后台指定。

4.      聚合查询

session.query(func.count('*')).select_from(User).scalar()

session.query(func.count('1')).select_from(User).scalar()

session.query(func.count(User.id)).scalar()

session.query(func.count('*')).filter(User.id> 0).scalar() # filter() 中包括 User,因此不须要指定表

session.query(func.count('*')).filter(User.name== 'a').limit(1).scalar() == 1 # 能够用 limit() 限制 count() 的返回数

session.query(func.sum(User.id)).scalar()

session.query(func.now()).scalar()# func 后能够跟随意函数名,仅仅要该数据库支持

session.query(func.current_timestamp()).scalar()

session.query(func.md5(User.name)).filter(User.id== 1).scalar()

5.      很多其它查询操作

#多条件查询

print(session.query(User).filter(and_(User.name.like("user),User.fullname.like("first%"))).all()

---相当于SQL语句--->

select * from user_table where user_table.name like %user anduser_table.fullname like first%

print(session.query(User).filter(or_(User.name.like("user%),User.password!= None)).all()

---相当于SQL语句--->

select * from user_table where user_table.name = user% oruser_table.password != none

#sql过滤

print(session(User).filter("id>:id").params(id=1).all()

---相当于SQL语句--->

select * from user_table where user_table.id > 1

#关联查询

print(session.query(User,Address).filter(User.id ==Address.user_id).all()

---相当于SQL语句--->

select * from user_table,address_table where user_table.id ==address.user_id

print (session.query(User).jion(User.address).all()

---相当于SQL语句--->

********************

print (session.query(User).outerjoin(User.address).all())

*******************

#子查询

stmt = session.query(Address.user_id,func.count('*').label("address_count").groupby(Address.user_id).subquery()

print(session.query(User,stmt.c.address_count).outjion((stmt,User.id ==stmt.c.user_id.order_by(User_id).all()

#exits

print (session.query(User).filter(exists().where(Address.user_id ==User.id)))

print (session.query(User).filter(User.addresses.any()))

其它《增删改》

query.filter(User.id == 1).update({User.name: 'c'})

user = query.get(1)

print user.name

user.name = 'd'

session.flush() # 写数据库,但并不提交

print query.get(1).name

session.delete(user)

session.flush()

print query.get(1)

session.rollback()

print query.get(1).name

query.filter(User.id == 1).delete()

session.commit()

print query.get(1)

sqlalchemy操作的更多相关文章

  1. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

  2. Python3.x:SQLAlchemy操作数据库

    Python3.x:SQLAlchemy操作数据库 前言 SQLAlchemy是一个ORM框架(Object Rational Mapping,对象关系映射),它可以帮助我们更加优雅.更加高效的实现数 ...

  3. Python之Mysql及SQLAlchemy操作总结

    一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...

  4. Python 使用sqlalchemy操作MYSQL

    1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql

  5. 04:sqlalchemy操作数据库

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

  6. SqlAlchemy操作(三)

    1.基于SQLALCHEMY建表 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Colu ...

  7. SqlAlchemy操作(一)

    博客转载于 http://www.cnblogs.com/haiyan123/p/8270520.html 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB ...

  8. SqlAlchemy操作(二)

    SQLALchemy初始化链接数据库 1. 数据库配置. https://www.cnblogs.com/mengbin0546/p/10124560.html 2.  python端操作. 一.  ...

  9. python ORM - sqlalchemy 操作使用

    python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库'''   ...

随机推荐

  1. objective-C 中的内存管理解说

    初学objectice-C的朋友都有一个困惑,总觉得对objective-C的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃.我在这里总结了自己对objective-C内存管理机制的研究成果和 ...

  2. UVa 11371 - Number Theory for Newbies

    題目:給你一個數字n.將裡面每位的數又一次組合形成a,b.使得a-b最大且是9的倍數. 分析:數論. 題目要求a,b和n的位數同样,不能有前導0. 定理1:交換一個數字中的某兩個位的數,形成的新數組和 ...

  3. 排序(6)---------归并排序(C语言实现)

    归并排序: 归并操作,也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.归并排序算法依赖归并操作. 归并操作的步骤例如以下:     (1) 申请空间,使其大小为两个已经排序序列之和.该空 ...

  4. iotop 分析系统那些进程占用io资源

    iotop -b -o  -t  -qqq >> /tmp/iotop.log 1.直接yum安装,rh6的光盘里有包. yum install iotop   2.命令参数介绍   -o ...

  5. IOS不用AutoLayout也能实现自己主动布局的类(3)----MyRelativeLayout横空出世

    对于IOS开发人员来说,在自己主动布局出现前仅仅能通过计算和设置frame的值来处理.这样设置位置时就会出现非常多硬编码,同一时候在屏幕旋转和不同屏幕之间适配时须要编码又一次调整位置和尺寸,我们也能够 ...

  6. [docker]docker的四种网络方式

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) H ...

  7. IOS中的ViewController 的loadView、viewDidLoad、viewDidUnload

    由init.loadView.viewDidLoad.viewDidUnload.dealloc的关系说起: 1 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方 ...

  8. Zigbee开发(1)

    只是研究zigbee的技术,也许后续的博客不会有很及时的更新,有时间 写一点东西能让大家有所收获吧. 环境搭建 Windows 64位的操作系统 IAR7.6 for 8051 ZStack CC25 ...

  9. ffmpeg 频中分离 video audio 截取片断

    1.获取视频的信息    ffmpeg -i video.avi 2,将图片序列分解合成视频    ffmpeg -i src.mpg image%d.jpg ffmpeg -f image2 -i ...

  10. Merging a WPF application into a single EXE(WPF应用程序合并成单个Exe文件)

    I always dislike handing off little applications to people. Not because I can’t, but because of the ...