sqlalchemy中Session和scopedsession区别及使用会话批量插入、更新数据

Session和scopedsession区别

参考文章:sqlalchemy 系列教程五-Session和scopedsession
详细内容可以参考上面链接

总结:

  1. session 和scopedsession 的区别, scoped_session 实现了一个线程的隔离, 保证不同的线程 拿到 不同的session, 同一个线程拿到的session 是同一个值.
  2. session 和scopedsession 本质上都是 用来 操作 数据库的. 只是session 只适合在单线程下面使用.

SQLAlchemy批量操作数据

参考:SQLAlchemy批量操作数据

  1. 建立会话
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from db import User

DB_CONNECT = 'mysql+mysql-connector://root:123@localhost/ooxx?charset=utf8'  # 因为使用的mysql-connector driver,所以此处使用的是utf8编码,否则会报错。如果项目中使用的是utf8mb4,为了兼容可以在这里单独创建一个session而不使用全局的session池;mysqldb等其他driver没有测试过。
engine = create_engine(DB_CONNECT, echo=True)  # 创建engine
DB_Session = sessionmaker(bind=engine)  # 构造session会话
session = DB_Session()  # 创建session
  1. 批量插入
session.bulk_insert_mappings(ModelClass, list(dict()))
  1. 批量更新
session.bulk_update_mappings(ModelClass, list(dict()))

和批量插入不同的是,批量更新的dict(),必须存在id的key,好让driver知道要更新的是那条记录
4. 批量删除

db.query(User).filter(User.home=='shanghai').delete()  # 删除家在上海的所有用户
# 或者
db.query(User).filter(User.home=='shanghai').update({User.active: 0})  # 批量更新家在上海的用户
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值