alembic и получение последнего вставленного значения

Я использую alembic для управления моей структурой базы данных.

После добавления таблицы с использованием id в качестве Integer и первичного ключа столбец id будет автоинкремент-столбцом. Как запросить данные в сценарии обновления, поэтому я уверен, что получаю правильный идентификатор (я знаю, что это 1 в этом конкретном случае)?

я знаю как

#creating the table op.create_table( 'srv_feed_return_type', sa.Column('id', sa.Integer, primary_key=True), sa.Column('name', sa.String(50), nullable=False), sa.Column('created', sa.DateTime, server_default=func.now(), nullable=False), sa.Column('created_by', sa.String(50), nullable=False), sa.Column('last_updated', sa.DateTime, nullable=False), sa.Column('last_updated_by', sa.String(50), nullable=False) ) #table for operations srv_feed_return_type = table('srv_feed_return_type', column('name'), column('created'), column('created_by'), column('last_updated'), column('last_updated_by')) #bulk insert op.bulk_insert(srv_feed_return_type, [ {'name': 'dataset', 'created': datetime.now(), 'created_by': 'Asken', 'last_updated': datetime.now(), 'last_updated_by': 'Asken'} ]) 

Я знаю, что могу обновить, но как сделать выбор, используя что-то похожее, как показано ниже?

 op.execute( srv_feed_return_type.update().\ where(srv_feed_return_type.c.name==op.inline_literal('dataset')).\ values({'name':op.inline_literal('somethingelse')}) ) 

  • Изменение данных как часть обновления alembic
  • Интеграция Alembic с SQLAlchemy
  • Извлечь значения таблицы с помощью alembic и обновить другую таблицу.
  • Изменение поля Enum с использованием Alembic
  • Как выполнять вставки и обновления в сценарии обновления Alembic?
  • sqlalchemy: alembic bulk insert failed: объект 'str' не имеет атрибута '_autoincrement_column'
  • Первоначальная миграция Alembic - sqlalchemy
  • Использование API Alembic из внутреннего кода приложения
  • One Solution collect form web for “alembic и получение последнего вставленного значения”

    Сначала, чтобы иметь столбец автоинкремента, вам нужно будет изменить определение схемы таблицы, чтобы последовательность была передана для столбца первичного ключа: sa.Column('id', sa.Integer, Sequence('srv_feed_r_t_seq'),primary_key=True),

     #creating the table op.create_table( 'srv_feed_return_type', sa.Column('id', sa.Integer, Sequence('srv_feed_r_t_seq'),primary_key=True), sa.Column('name', sa.String(50), nullable=False), sa.Column('created', sa.DateTime, server_default=func.now(), nullable=False), sa.Column('created_by', sa.String(50), nullable=False), sa.Column('last_updated', sa.DateTime, nullable=False), sa.Column('last_updated_by', sa.String(50), nullable=False) ) 

    Теперь о том, как получить идентификатор PK:

    op.execute и op.bulk_insert не возвращают вам никаких результатов. Но вы можете получить такое же соединение, которое используется для этих операций.

    После выполнения bulk_insert или execute(table.update ...) вы можете запустить запрос выбора в том же контексте и получить идентификатор PK для интересующей записи:

     connection = op.get_bind() r = connection.execute(srv_feed_return_type.select().where(...)) for row in r: pk_id = r['id'] """or something more sophisticated""" 

    Вам нужно будет указать правильный фильтр в разделе where, чтобы убедиться, что вы идентифицировали запись, которую вы недавно изменили уникальным образом.

    Вот пример аналогичной функциональности , но он имеет жестко запрограммированные запросы

    Python - лучший язык программирования в мире.