Session和scopedsession区别
参考文章:sqlalchemy 系列教程五-Session和scopedsession
详细内容可以参考上面链接
总结:
- session 和scopedsession 的区别, scoped_session 实现了一个线程的隔离, 保证不同的线程 拿到 不同的session, 同一个线程拿到的session 是同一个值.
- session 和scopedsession 本质上都是 用来 操作 数据库的. 只是session 只适合在单线程下面使用.
SQLAlchemy批量操作数据
- 建立会话
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
- 批量插入
session.bulk_insert_mappings(ModelClass, list(dict()))
- 批量更新
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}) # 批量更新家在上海的用户