示例#1
0
async def save_instances(
        instances: Iterable[DeclarativeMeta], *,
        cls: DeclarativeMeta,
        connection: ConnectionType,
        is_mysql: bool) -> List[int]:
    columns_names = list(cls.columns_fields_names())
    primary_key = await get_primary_key(table=cls.__table__)
    primary_key_column_index = columns_names.index(primary_key)
    columns_names.pop(primary_key_column_index)
    unique_columns_names = await get_unique_columns_names(cls.__table__)
    returning_columns_names = [primary_key]

    def record_without_id(instance: DeclarativeMeta
                          ) -> RecordType:
        res = list(instance.record)
        res.pop(primary_key_column_index)
        return tuple(res)

    records = map(record_without_id, instances)
    resp = await insert_returning(
        table_name=cls.__tablename__,
        columns_names=columns_names,
        unique_columns_names=unique_columns_names,
        returning_columns_names=returning_columns_names,
        records=records,
        merge=True,
        connection=connection,
        is_mysql=is_mysql)
    return [row[0] for row in resp]