def METHOD_NAME(cls,
        *,
        frame: Frame,
        label: str, # can be None
        cursor: sqlite3.Cursor,
        include_columns: bool,
        include_index: bool,
        # store_filter: tp.Optional[StoreFilter]
        ) -> None:
    # here we provide a row-based represerntation that is externally usable as an slqite db; an alternative approach would be to store one cell pre column, where the column iststored as as binary BLOB; see here https://stackoverflow.com/questions/18621513/python-insert-numpy-array-into-sqlite3-database
    field_names, dtypes = cls.get_field_names_and_dtypes(
            frame=frame,
            include_index=include_index,
            include_index_name=True,
            include_columns=include_columns,
            include_columns_name=False,
            force_brackets=True # needed for having numbers as field names
            )
    index = frame._index
    # columns = frame._columns
    if not include_index:
        create_primary_key = ''
    else:
        primary_fields = ', '.join(field_names[:index.depth])
        # need leading comma
        create_primary_key = f', PRIMARY KEY ({primary_fields})'
    field_name_to_field_type = (
            (field, cls._dtype_to_affinity_type(dtype))
            for field, dtype in zip(field_names, dtypes)
            )
    create_fields = ', '.join(f'{k} {v}' for k, v in field_name_to_field_type)
    create = f'CREATE TABLE "{label}" ({create_fields}{create_primary_key})'
    cursor.execute(create)
    # works for IndexHierarchy too
    insert_fields = ', '.join(f'{k}' for k in field_names)
    insert_template = ', '.join('?' for _ in field_names)
    insert = f'INSERT INTO "{label}" ({insert_fields}) VALUES ({insert_template})'
    values = cls._get_row_iterator(frame=frame, include_index=include_index)
    cursor.executemany(insert, values())