J'essaie de créer un modèle utilisateur qui utilise l'UUID comme clé primaire:
from src import create_app from src.db import db from flask_migrate import Migrate # Models from src.user.models.user import User app = create_app() migrate = Migrate(app, db)`
Mais lorsque je génère les migrations, je reçois:
File "/home/pc/Downloads/project/auth/venv/lib/python3.6/site-packages/alembic/runtime/environment.py", line 836, in run_migrations self.get_context().run_migrations(**kw) File "/home/pc/Downloads/project/auth/venv/lib/python3.6/site-packages/alembic/runtime/migration.py", line 330, in run_migrations step.migration_fn(**kw) File "/home/pc/Downloads/project/auth/migrations/versions/efae4166f832_.py", line 22, in upgrade sa.Column('id', sqlalchemy_utils.types.uuid.UUIDType(length=16), nullable=False), NameError: name 'sqlalchemy_utils' is not defined`
3 Réponses :
Il vous suffit d'ajouter:
import sqlalchemy_utils
à votre script.py.mako dans le dossier des migrations
J'ai fait quelque chose de très similaire - ajoutez cette ligne en haut de mon fichier migrations / versions / 9d34543545.py
Merci, Marco, mais je l'ai déjà corrigé. J'ai mis l'importation import sqlalchemy_utils
dans env.py et script.py.mako , j'ai également mis la fonction suivante:
context.configure( ..., render_item=render_item, ... )
Dans le env.py , et dans le même fichier, j'ai défini render_item = render_item
dans la fonction run_migrations_online
:
def render_item(type_, obj, autogen_context): """Apply custom rendering for selected items""" if type_ == "type" and isinstance(obj, sqlalchemy_utils.types.uuid.UUIDType): # Add import for this type autogen_context.imports.add("import sqlalchemy_utils") autogen_context.imports.add("import uuid") return "sqlalchemy_utils.types.uuid.UUIDType(), default=uuid.uuid4" # Default rendering for other objects return False
J'ai fait des recherches pour le faire automatiquement, mais je n'ai rien trouvé qui puisse m'aider.
L'ordre des opérations compte:
exporter FLASK_APP = manage.py
flask db init
Suivez le didacticiel ci-dessus
migration de la base de données du flacon
mise à jour de la base de données du flacon
Ajoutez la ligne import sqlalchemy_utils
au fichier migrations / versions / {hash} _my_comment.py
nouvellement créé. Cependant, cela ne résoudra le problème que pour cette étape spécifique de la migration. Si vous pensez que vous allez apporter beaucoup de changements aux colonnes qui font référence à sqlalchemy_utils
, vous devriez probablement faire quelque chose de plus robuste comme la suggestion de Walter. Même dans ce cas, il semble que vous deviez peut-être ajouter du code pour gérer correctement chaque type de colonne que vous finirez par utiliser.
NB: malgré la suggestion à plusieurs endroits d'ajouter simplement la ligne d'importation au fichier script.py.mako
, cela n'a pas fonctionné pour moi.