def METHOD_NAME(
    vessel_ids: list,
    vessels_table: Table,
    vessels_columns_to_add: list = None,
    districts_table: Table = None,
    districts_columns_to_add: list = None,
) -> Select:
    """
    Creates a `sqlalchemy.select` statement representing a query to fetch the
    designated columns from the `vessels` and / or `districts` tables for the
    indicated `vessel_ids`.
    Args:
        vessel_ids (list): List of vessels `id` to fetch data for.
        vessels_table (Table): vessels table.
        vessels_columns_to_add (list, optional): List of columns to get from the
          `vessels` table. Defaults to None.
        districts_table (Table, optional): districts table. Must be supplied if
          `districts_columns_to_get` is given. Defaults to None.
        districts_columns_to_add (list, optional): List of columns to get from the
          `districts` table. Defaults to None.
    Returns:
        Select: select statement to execute to get the indicated data.
    """
    from_table = vessels_table
    if districts_columns_to_add:
        assert isinstance(districts_table, Table)
        from_table = from_table.join(
            districts_table,
            from_table.c.district_code == districts_table.c.district_code,
            isouter=True,
        )
    columns = [vessels_table.c.id.label("vessel_id")]
    if vessels_columns_to_add:
        columns += [vessels_table.c.get(col) for col in vessels_columns_to_add]
    if districts_columns_to_add:
        columns += [districts_table.c.get(col) for col in districts_columns_to_add]
    q = (
        select(columns)
        .select_from(from_table)
        .where(vessels_table.c.id.in_(vessel_ids))
    )
    return q