Migracions de base de dades amb SQLAlchemy, Alembic i Pytest

Article que presenta un enfocament pràctic per realitzar migracions a nivell de funció en projectes que utilitzen bases de dades, utilitzant SQLAlchemy, Alembic i Pytest. Recomanacions pensades per a equips professionals com els de Q2BSTUDIO.

sábado, 16 de agosto de 2025 • 5 min de lectura • Equip Q2BSTUDIO

Intel·ligència-Artificial-

Introducció Un dels primers obstacles que afronta un desenvolupador en iniciar un projecte és configurar les proves unitàries i establir un conjunt bàsic de proves unitàries. En projectes que utilitzen bases de dades, combinar migracions amb proves automatitzades afegeix complexitat. En aquest article presentem un enfocament pràctic per realitzar migracions a nivell de funció utilitzant SQLAlchemy, Alembic i Pytest, amb recomanacions pensades per a equips professionals com els de Q2BSTUDIO.

Concepte de migracions a nivell de funció Les migracions a nivell de funció consisteixen a organitzar els canvis d'esquema o dades en petites unitats associades a funcions o característiques concretes. En lloc de tenir migracions monolítiques que abasten molts canvis, cada migració pot ser una funció o un fitxer que conté upgrade i downgrade específics. Això facilita proves aïllades, revisions de codi i revertir canvis puntuals en producció.

Configurar Alembic i SQLAlchemy Alembic s'integra amb SQLAlchemy a través d'un env.py i una carpeta versions on s'emmagatzemen les revisions. Un flux habitual és generar revisions amb alembic revision --autogenerate -m missatge_de_revisió i després editar els fitxers per convertir canvis automàtics en funcions reutilitzables. És recomanable mantenir utilitats de migració en mòduls separats perquè les funcions de migració puguin ser importades des de les proves unitàries i executades de manera controlada.

Patró per a funcions de migració Una pràctica útil és definir en cada fitxer de migració dues funcions clares upgrade i downgrade que deleguin en funcions de negoci descrites en un mòdul migrations_helpers. Per exemple, encapsular la creació d'una taula, l'addició de columnes o les transformacions de dades en funcions petites que poden ser cridades tant per Alembic com per proves unitàries. Això facilita validar l'efecte de la migració sense necessitat d'aplicar tota la cadena de revisions.

Provar migracions amb Pytest Per provar migracions l'habitual és crear fixtures de Pytest que creïn una base de dades temporal, si és possible una que reprodueixi el motor de producció. Per a proves ràpides i unitàries es pot utilitzar sqlite:///:memory: amb limitacions, o utilitzar contenidors efímers amb PostgreSQL o MySQL per a més fidelitat. Un fixture d'exemple crea un engine amb create_engine, una sessió amb sessionmaker i retorna una sessió aïllada. En les proves es pot aplicar la funció de migració directament o executar alembic upgrade head de manera programàtica utilitzant alembic.config i alembic.command.

Executar migracions des de proves Existeixen dues estratègies: executar la migració mitjançant l'API d'Alembic per simular el flux real de desplegament, o importar i executar la funció upgrade directament per a proves unitàries sobre una transacció controlada. La segona estratègia és més ràpida i permet assertions precises sobre l'estat de la base de dades després de la migració. Per a proves integrades convé aplicar alembic upgrade head sobre una base de dades temporal i després executar els tests d'integració.

Gestió de transaccions i aïllament Per mantenir les proves netes utilitzeu transaccions niades amb session.begin_nested i rollback al final del test. Configurar expire_on_commit en false ajuda a evitar comportaments inesperats d'objectes ORM després de commits intermedis. En bases de dades que no suporten transaccions DDL de manera plena considereu crear i destruir esquemes o bases de dades senceres per test.

Proves de dades i transformacions Moltes migracions no només modifiquen l'esquema sinó que transformen dades. Per verificar aquestes transformacions creeu fixtures amb dades d'exemple representatives i després invoqueu la funció de migració. Valideu que els nous camps continguin els valors esperats, que les regles de negoci s'apliquessin correctament i que les consultes crítiques continuïn funcionant. Automatitzar aquestes comprovacions redueix risc en desplegaments a producció.

Integració contínua i desplegament En pipelines CI/CD, automatitzeu passos per instal·lar dependències, executar les migracions en una base de dades de staging i llançar la bateria de proves amb Pytest. Si utilitzeu serveis cloud com AWS o Azure, integreu etapes que llancin recursos temporals en aquests entorns o utilitzeu emuladors i contenidors. Aplicar migracions en staging abans de producció i tenir proves de regressió específiques per a migracions redueix incidències en desplegaments en calent.

Eines i recomanacions avançades Per a proves més realistes considereu testcontainers o frameworks similars que aixequen instàncies reals de PostgreSQL o MySQL durant les proves. Utilitzeu linters i revisions automàtiques per a fitxers de migració, documenteu cada funció de migració i manteniu una estratègia clara de nomenclatura per a versions. Mantingueu utilitats de rollback i scripts de verificació post migració.

Bones pràctiques Mantingueu les migracions petites i focalitzades, escriviu proves que cobreixin tant estructura com dades, utilitzeu fixtures reproduïbles i automatitzeu l'execució d'Alembic des del codi de proves quan sigui adequat. Documenteu cada migració i manteniu una política de proves que inclogui migracions en el flux de CI/CD.

Per què confiar en Q2BSTUDIO Q2BSTUDIO és una empresa de desenvolupament de programari especialitzada en aplicacions a mida i programari a mida. Els nostres equips combinen experiència en intel·ligència artificial i IA per a empreses, ciberseguretat, serveis cloud AWS i Azure i serveis intel·ligència de negoci per oferir solucions completes. Implementem pràctiques robustes de migració i testing que inclouen agents IA, Power BI per a visualització i pipelines segurs al núvol.

Serveis clau de Q2BSTUDIO Oferim desenvolupament d'aplicacions a mida, consultoria en intel·ligència artificial, integració d'agents IA, solucions de ciberseguretat, desplegament en serveis cloud AWS i Azure, i projectes d'intel·ligència de negoci amb Power BI. El nostre enfocament inclou proves automatitzades de migracions, validació de dades i desplegaments controlats per minimitzar riscos en producció.

Resum i propers passos Implementar migracions a nivell de funció amb SQLAlchemy, Alembic i Pytest millora la traçabilitat i testabilitat de canvis en la base de dades. Combineu funcions de migració reutilitzables amb fixtures de proves i entorns temporals per garantir qualitat. Si necessiteu ajuda per dissenyar un flux de migracions, automatitzar proves unitàries o desplegar solucions al núvol amb serveis cloud AWS i Azure, l'equip de Q2BSTUDIO pot acompanyar-vos en tot el cicle, des de programari a mida fins a solucions d'intel·ligència artificial i ciberseguretat.

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.