SQLAlchemy не поддерживает auto_increment
для столбцов без первичного ключа.
Если ваша база данных поддерживает это, вы можете настроить такое же поведение, используя последовательности. PostgreSQL поддерживает это. На самом деле последовательности не привязаны к конкретному столбцу. Вместо этого они существуют на уровне базы данных и могут использоваться повторно. Последовательности - это точная конструкция, которую SQLAlchemy использует для автоматического увеличения столбцов первичного ключа.
Чтобы использовать последовательность, описанную в принятом ответе, она должна существовать. Далее у меня есть пример алембической миграции с SQLAlchemy для достижения этой цели.
Вы можете связать последовательность со столбцом в конструкторе столбца . Помогает DDL Expression Constructs API вы создаете и отбрасываете последовательность.
Пример:
from alembic import op
import sqlalchemy as sa
measurement_id_seq = sa.Sequence('Measurement_MeasurementId_seq') # represents the sequence
def upgrade():
op.execute(sa.schema.CreateSequence(measurement_id_seq)) # create the sequence
op.create_table(
'Measurement',
sa.Column('DataSourceId',
sa.Integer,
sa.ForeignKey('DataSource.DataSourceId'),
nullable=False),
sa.Column('LocationId',
sa.Integer,
sa.ForeignKey('Location.LocationId'),
nullable=False),
sa.Column('MeasurementId',
sa.Integer,
measurement_id_seq, # the sequence as SchemaItem
server_default=measurement_id_seq.next_value())) # next value of the sequence as default
[...]
op.create_primary_key('Measurement_pkey', 'Measurement',
['DataSourceId', 'LocationId', 'Timestamp'])
pass
def downgrade():
op.execute(
sa.schema.DropSequence(sa.Sequence('Measurement_MeasurementId_seq')))
op.drop_constraint('Measurement_pkey', 'Measurement')
op.drop_table('Measurement')
pass
person
Alexander Eble
schedule
12.05.2021