From 7064da59f35ff69b66289d21da755544c4265c7d Mon Sep 17 00:00:00 2001 From: taconi Date: Wed, 15 Jan 2025 01:38:29 -0300 Subject: [PATCH] =?UTF-8?q?Migra=C3=A7=C3=A3o=20em=20batch=20na=20exerc?= =?UTF-8?q?=C3=ADcio=204=20da=20aula=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aulas/exercicios_resolvidos/aula_04.md | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/aulas/exercicios_resolvidos/aula_04.md b/aulas/exercicios_resolvidos/aula_04.md index 96b5f289..56698f6c 100644 --- a/aulas/exercicios_resolvidos/aula_04.md +++ b/aulas/exercicios_resolvidos/aula_04.md @@ -154,6 +154,38 @@ INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade 74f39286e2f6 -> bb77f9679811, exercicio 02 aula 04 ``` +??? warning "sqlalchemy.exc.OperationalError: (sqlite3.OperationalError)" + Caso você receba esse erro ao aplicar a migração, recomendo que veja a [Live de Python #211](https://youtu.be/yQtqkq9UkDA) live sobre `migrações e bancos de dados evolutivos`. + No minuto [1:28:33](https://youtu.be/yQtqkq9UkDA?t=5313) o motivo e a solução desse erro são abordados em mais detalhes. + + Será preciso alterar o arquivo de migrações manualmente para que possamos inserir a coluna em lote, + para todas as linhas da tabela de uma vez. + + O arquivo de migrações deve se parecer com esse: + + ```python title="/migrations/versions/bb77f9679811_exercicio_02_aula_04.py" linenums="20" hl_lines="3-4 15-16" + # ... + def upgrade(): + with op.batch_alter_table('users', schema=None) as batch_op: #(1)! + batch_op.add_column( #(2)! + sa.Column( + 'updated_at', + sa.DateTime(), + server_default=sa.text('(CURRENT_TIMESTAMP)'), + nullable=False, + ) + ) + + + def downgrade(): + with op.batch_alter_table('users', schema=None) as batch_op: #(1)! + batch_op.drop_column('updated_at') #(3)! + ``` + + 1. Entrando no contexto das operações em lote + 2. Adiciona a coluna `updated_at` na tabela `users` com o `batch_op` + 3. Remove a coluna `updated_at` da tabela `users` com o `batch_op` + Checando o resultado no schema do banco de dados: ```sql title="$ Execução no terminal!" hl_lines="15"