Make Alembic détecte les changements de type de colonne et modifie la longueur des champs de chaîne de caractères
La détection automatique ne détecte pas les changements de type de colonne par défaut. Vous devez l'activer en éditant le fichier alembic/env.py.
Par défaut, Alembic ne change pas la longueur des champs de chaîne de caractères, j'ai remarqué ceci après avoir changé un champ de chaîne de caractères de :
description = Column(String(150), server_default='')
à :
description = Column(String(250), server_default='')
Aucun changement n'a été apporté.
Il semble que la détection de changement de type de colonne est désactivée par défaut, vous pouvez donc la tester en premier, et vous pouvez l'activer en ajoutant'compare_type=True' au contexte.
Editez le fichier alambic/env.py et ajoutez'compare_type=True' à deux endroits :
def run_migrations_offline():
...
context.configure(
url=url, target_metadata=target_metadata, literal_binds=True,
compare_type=True # <--- here
)
...
def run_migrations_online():
...
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
compare_type=True # <--- here
)
...
Maintenant, les changements de type de colonne seront détectés et correctement migrés.
Liens / crédits
Alembic - migration for String length change
https://eshlox.net/2017/08/06/alembic-migration-for-string-length-change
Auto Generating Migrations
https://alembic.sqlalchemy.org/en/latest/autogenerate.html#what-does-autogenerate-detect-and-what-does-it-not-detect
En savoir plus...
Alembic SQLAlchemy
Récent
- Masquer les clés primaires de la base de données UUID de votre application web
- Don't Repeat Yourself (DRY) avec Jinja2
- SQLAlchemy, PostgreSQL, nombre maximal de lignes par user
- Afficher les valeurs des filtres dynamiques SQLAlchemy
- Transfert de données sécurisé grâce au cryptage à Public Key et à pyNaCl
- rqlite : une alternative à haute disponibilité et dist distribuée SQLite
Les plus consultés
- Utilisation des Python's pyOpenSSL pour vérifier les certificats SSL téléchargés d'un hôte
- Utiliser UUIDs au lieu de Integer Autoincrement Primary Keys avec SQLAlchemy et MariaDb
- Utiliser PyInstaller et Cython pour créer un exécutable Python
- Connexion à un service sur un hôte Docker à partir d'un conteneur Docker
- SQLAlchemy : Utilisation de Cascade Deletes pour supprimer des objets connexes
- Flask RESTful API validation des paramètres de la requête avec les schémas Marshmallow