Сегодня, вчера, и позавчерашний доход

Я обнаружил, что могу установить порядок столбцов (в последнюю позицию) в Mixin, используя:

@declared_attr
def notes(cls):
    col = sa.Column(sa.String(4000) , nullable=False, default='')
    # get highest column order of all Column objects of this class.
    last_position = max([value._creation_order
            for key, value in vars(cls).items()
            if isinstance(value, Column)])
    col._creation_order = last_position + 0.5
    return col

class Service(Base, NotesMixin):
    __tablename__ =  "service"
    service_id = sa.Column(sa.Integer, primary_key=True)
    name = sa.Column(sa.String(255), nullable=False, index=True, unique=True)

Чтобы установить порядок столбцов на основании расположения другого столбца (аналогично

alter table `some_table` modify `some_colum` `some_type` after `some_other_column;

blockquote>

см. https://stackoverflow.com/a/3822219/488331 )

Вы можете использовать:

@declared_attr
def notes(cls):
    col = sa.Column(sa.String(4000) , nullable=False, default='')
    col._creation_order = cls.some_other_column._creation_order + 0.5
    return col

ПРИМЕЧАНИЕ. Если вы используете + 1, вы получите 2 столбца назад. Я действительно не понимаю, почему вы даже можете использовать десятичное число.

Чтобы установить порядок столбцов, основанный на местоположении первого столбца (сделайте это всегда 4-й столбец), вы можете сделать:

@declared_attr
def notes(cls):
    col = sa.Column(sa.String(4000) , nullable=False, default='')
    # get lowest column order of all Column objects of this class.
    start_position = min([value._creation_order
            for key, value in vars(cls).items()
            if isinstance(value, Column)])
    col._creation_order = start_position + 3.5
    return col

0
задан Stephen Theunissen 13 July 2018 в 09:46
поделиться