如何在SQLAlchemy中为整列数值增加指定增量值?
SQLAlchemy 高效批量更新列值的实现
SQLAlchemy完全支持和你原生sqlite3操作等价的高效批量更新,无需逐行迭代,以下是两种常用实现方式:
方式一:基于SQLAlchemy Core
适合直接操作表结构的场景,逻辑和原生SQL最接近:
from sqlalchemy import create_engine, MetaData, Table amt = 3 # 指定增量值 # 连接数据库 engine = create_engine("sqlite:///funds.db") # 自动加载现有表结构 metadata = MetaData() funds_table = Table("funds_table", metadata, autoload_with=engine) # 执行批量更新 with engine.connect() as conn: # 构造UPDATE语句:将funds列的值加上amt update_stmt = funds_table.update().values(funds=funds_table.c.funds + amt) conn.execute(update_stmt) conn.commit()
方式二:基于SQLAlchemy ORM(声明式模型)
如果你使用ORM声明式模型,可通过query.update()实现批量更新:
首先假设你已定义了对应的ORM模型:
from sqlalchemy import Column, Integer from sqlalchemy.orm import declarative_base Base = declarative_base() class Funds(Base): __tablename__ = "funds_table" id = Column(Integer, primary_key=True) funds = Column(Integer)
然后执行更新操作:
from sqlalchemy import create_engine from sqlalchemy.orm import Session amt = 3 # 指定增量值 engine = create_engine("sqlite:///funds.db") with Session(engine) as session: # 生成批量UPDATE语句,数据库端一次性完成更新 session.query(Funds).update({Funds.funds: Funds.funds + amt}) session.commit()
以上两种方式都会直接生成对应的UPDATE funds_table SET funds=funds+?语句发送给数据库,和你原生sqlite3的操作效率完全一致,无需加载所有行到内存逐行处理。
内容的提问来源于stack exchange,提问作者Justin Chee
相关产品推荐
相关产品推荐

