sqlalchemy 单表增删改查

摘要:
1、连接数据库,并创建sessionfromsqlalchemy.ormimportsessionmakerfromsqlalchemyimportcreate_engineengine=create_engine("mysql+pymysql://root:密码@127.0.0.1:3306/数据库?charset=utf8",max_overflow=0,#超过连接池大小外最多创建的连接poo

1、连接数据库,并创建session

from sqlalchemy.orm importsessionmaker
from sqlalchemy importcreate_engine

engine =create_engine(
        "mysql+pymysql://root:密码@127.0.0.1:3306/数据库?charset=utf8",
        max_overflow=0,  #超过连接池大小外最多创建的连接
        pool_size=5,  #连接池大小
        pool_timeout=30,  #池中没有线程最多等待的时间,否则报错
        pool_recycle=-1  #多久之后对线程池中的线程进行一次连接的回收(重置)
)

SessionFactory = sessionmaker(bind=engine)

session = SessionFactory()

2、增

#单条
obj = Users(name='tom')
session.add(obj)
session.commit()
#多条
session.add_all([
        Users(name='海贼王'),
        Users(name='死神')
])
session.commit()
session.close()

3、删

session.query(Users).filter(Users.id >= 2).delete()
session.commit()
session.close()

4、改

session.query(Users).filter(Users.id == 4).update({Users.name:'死神'})
session.query(Users).filter(Users.id == 4).update({'name':'火影'})
#在原本的字段,修改属性
session.query(Users).filter(Users.id == 4).update({'name':Users.name+"DSB"},synchronize_session=False)
session.commit()
session.close()

5、查

#查询所有
result =session.query(Users).all()
for row inresult:
        print(row.id,row.name)
#根据条件查询
result = session.query(Users).filter(Users.id >= 2)
for row inresult:
        print(row.id,row.name)
#查询id大于2的第一个对象
result = session.query(Users).filter(Users.id >= 2).first()
print(result)
查询一条数据
ret = session.query(User).filter(User.id == 1).one()
print(ret.id, ret.name)

补充

#1. 指定列, 字段别名#select id,name as cname from users;
result = session.query(Users.id,Users.name.label('cname')).all()
for item inresult:
        print(item[0],item.id,item.cname)
#2. 默认条件and
session.query(Users).filter(Users.id > 1, Users.name == 'abc').all()
#3. between
session.query(Users).filter(Users.id.between(1, 3), Users.name == 'abc').all()
#4. in, not in ~
session.query(Users).filter(Users.id.in_([1,3,4])).all()
session.query(Users).filter(~Users.id.in_([1,3,4])).all()
#5. 子查询
session.query(Users).filter(Users.id.in_(session.query(Users.id).filter(Users.name=='abc'))).all()
#6. and 和 or
from sqlalchemy importand_, or_
#默认 and
session.query(Users).filter(Users.id > 3, Users.name == 'eric').all()
#and
session.query(Users).filter(and_(Users.id > 3, Users.name == 'eric')).all()
#or
session.query(Users).filter(or_(Users.id < 2, Users.name == 'eric')).all()
#and or 一起使用
session.query(Users).filter(
    or_(
        Users.id < 2,
        and_(Users.name == 'eric', Users.id > 3),
        Users.extra != "")).all()

#7. filter_by,查询内部执行的是filter
session.query(Users).filter_by(name='abc').all()

#8. 通配符 % 任意个, _一个
ret = session.query(Users).filter(Users.name.like('a_')).all()
ret = session.query(Users).filter(~Users.name.like('e%')).all()

#9. 切片/分页
result = session.query(Users)[1:2]

#10.排序
ret =session.query(Users).order_by(Users.name.desc()).all()
ret =session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()

#11. group by, having , 聚合函数
from sqlalchemy.sql importfunc

ret =session.query(
        Users.depart_id,
        func.count(Users.id),
).group_by(Users.depart_id).all()
for item inret:
        print(item)

#having
from sqlalchemy.sql importfunc

ret =session.query(
        Users.depart_id,
        func.count(Users.id),
).group_by(Users.depart_id).having(func.count(Users.id) >= 2).all()
for item inret:
        print(item)

#12.union 和 union all, unuon 去重 union all 不去重
"""select id,name from users
UNION
select id,name from users;
"""
#去重
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret =q1.union(q2).all()
#不去重
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union_all(q2).all()

注意:

1、操作数据结束,关闭session

session.close()

2、增、删、改,要提交数据

session.commit()

3、去除all获取sql语句

免责声明:文章转载自《sqlalchemy 单表增删改查》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android中getSystemService详解avalon最佳实践下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

验证码实现原理

最简单的验证码   极验验证   扫码登录   12306验证码 先说结论吧 仔细了解了一番后,发现,其实 验证码 ,还是基于session原理 或者token原理 什么是session 这里推荐一本书《图解http》,里面讲解的很清楚。如果只是想简单的了解一下session,可以看看这个文章。 什么是token token是另一种使用较多的鉴权方式,具...

oracle审计

1、什么是审计审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查看)中。默认情况下审计是没有开启的。不管你是否打开数据库的...

Hibernate 缓存机制

一、why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库。 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。 缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 二、what(Hibernate缓存原理是怎样的?)Hi...

jsp、javabean、el

JSP三大指令一个jsp页面中,可以有0~N个指令的定义!1. page --> 最复杂:<%@page language="java" info="xxx"...%>* pageEncoding和contentType:> pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.j...

sqlalchemy创建数据库自动映射

# -*- coding: utf-8 -*-from datetime import datetimefrom sqlalchemy.ext.automap import automap_basefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engine # 数据...

抓包工具Fiddler的简单使用

HTTP代理 http代理,就是代理客户机的http访问,主要代理浏览器访问页面 代理服务器是介于浏览器和web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求, Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器 Fiddler 安装 官方网站下载安装:https...