updating

This module provide utility functions for update operation.

sqlalchemy_mate.crud.updating.update_all(engine: sqlalchemy.engine.base.Engine, table: sqlalchemy.sql.schema.Table, data: Union[Dict[str, Any], List[Dict[str, Any]]], upsert=False) Tuple[int, int][source]

Update data by its primary_key column values. By default upsert is False.

sqlalchemy_mate.crud.updating.upsert_all(engine: sqlalchemy.engine.base.Engine, table: sqlalchemy.sql.schema.Table, data: Union[Dict[str, Any], List[Dict[str, Any]]]) Tuple[int, int][source]

Update data by primary key columns. If not able to update, do insert.

Example:

# define data model
t_user = Table(
    "users", metadata,
    Column("id", Integer, primary_key=True),
    Column("name", String),
)

# suppose in database we already have {"id": 1, "name": "Alice"}
data = [
    {"id": 1, "name": "Bob"}, # this will be updated
    {"id": 2, "name": "Cathy"}, # this will be added
]
update_count, insert_count = upsert_all(engine, t_user, data)
print(update_count) # number of row updated counter
print(insert_count) # number of row inserted counter

# will return: [{"id": 1, "name": "Bob"}, {"id": 2, "name": "Cathy"}]
with engine.connect() as connection:
    print(connection.execute(select([table_user])).all())

中文文档

批量更新文档. 如果该表格定义了Primary Key, 则用Primary Key约束where语句. 对于 where语句无法找到的行, 自动进行批量 bulk insert.