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

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_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 in result:
print(row.id,row.name)
# 根据条件查询
result = session.query(Users).filter(Users.id >= 2)
for row in result:
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 in result:
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 import and_, 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 import func ret = session.query(
Users.depart_id,
func.count(Users.id),
).group_by(Users.depart_id).all()
for item in ret:
print(item) # having
from sqlalchemy.sql import func ret = session.query(
Users.depart_id,
func.count(Users.id),
).group_by(Users.depart_id).having(func.count(Users.id) >= 2).all()
for item in ret:
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 单表增删改查的更多相关文章

  1. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  2. Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境

    目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...

  3. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  4. mysql数据库单表增删改查命令

    数据库DB-database-mysql 课程安排 第一天: 1.数据库定义以及设计 2.mysql服务端的安装 3.mysql-dos操作 库的操作 表的操作 4.mysql客户端navicate工 ...

  5. Django ORM基本的单表增删改查

    创建表 步骤: 1.app下models.py里创建类(继承models.Model) from django.db import models class UserInfo(models.Model ...

  6. ORM之单表增删改查

    ORM之单表增删改查 在函数前,先导入要操作的数据库表模块,model from model所在的路径文件夹 import model   在views文件中,加的路径: #就一个app01功能的文件 ...

  7. MySQL初步理解,简易单表增删改查

    什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt ...

  8. django(七)之数据库表的单表-增删改查QuerySet,双下划线

    https://www.cnblogs.com/haiyan123/p/7738435.html https://www.cnblogs.com/yuanchenqi/articles/6083427 ...

  9. Django ORM字段类型 单表增删改查 万能的双下划线

    1.ORM三种模型 模型之间的三种关系:一对一,一对多,多对多. 一对一:实质就是在主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性: 一 ...

随机推荐

  1. 列表内容自动向上滚动(原生JS)

    效果展示 (鼠标移入,滚动停止:鼠标移出,滚动继续) 实现原理 1. html结构:核心是ul > li,ul外层包裹着div.因为想要内容循环滚动无缝衔接,所以在原有ul后面还要有一个一样内容 ...

  2. jQuery---鼠标滚轮控制div横向滚动条左右移动

    HTML <div class="table-responsive"> <div class="fhtable" style="wi ...

  3. Checkpoint 防火墙修改网卡buffer

    近期有一台CP5100频繁丢包,修改网卡buffer步骤如下,默认的网卡buffer为256,最大可以修改为4096,其步骤如下: step1:ssh登录checkpoint 防火墙控制台 step2 ...

  4. Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值

    参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...

  5. 机器学习 - Python 02

    好了,咱们接着上一节的内容,继续学习机器学习中的Python语法部分.这一节算是Python语法的最后一节了.也就是说如果真的看懂了这两节的内容,理论上说就机器学习的领域或者方向,语言已经不是问题了. ...

  6. mysql中information_schema.triggers字段说明

    1. 获取所有触发器信息(TRIGGERS) SELECT  *  FROM information_schema.TRIGGERS WHERE  TRIGGER_SCHEMA='数据库名';  TR ...

  7. Ceph 之RGW Pub-Sub Module

    Overview Pub-Sub module 顾名思义是一个发布订阅相关的模块.Pub-Sub module 为对象存储的变更事件提供一种发布-订阅机制.而发布-订阅架构本身应用非常广泛,如公有云G ...

  8. 洛谷$P3324\ [SDOI2015]$星际战争 网络流+二分

    正解:网络流+二分 解题报告: 传送门$QwQ$ 其实我第一反应是费用流来着,,,但是仔细想了下发现我不会实现各个武器之间独立同时?而且攻击是连续的答案可能是小数嘛$QwQ$. 所以显然不是递推就二分 ...

  9. $Poj1037\ A\ Decorative\ Fence$ 计数类$DP$

    Poj  AcWing Description Sol 这题很数位$DP$啊, 预处理$+$试填法 $F[i][j][k]$表示用$i$块长度不同的木板,当前木板(第$i$块)在这$i$块木板中从小到 ...

  10. 1082 射击比赛 (20 分)C语言

    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...