without example python flask flask-sqlalchemy alembic

example - python flask orm postgresql



Alambique: la revisiĆ³n de alambique dice error de importaciĆ³n (3)

Nos hemos encontrado con el mismo problema, se reduce a env.py que no se llama por la revisión a menos que se --autogenerate indicador --autogenerate . Puede probar esto colocando una declaración de impresión en la parte superior de su archivo env.py.

Estamos trabajando en ello llamando a --autogenerate luego eliminando el código generado.

Estoy tratando de integrar mi proyecto Flask con Alembic
Mi estructura de aplicación parece

project/ configuration/ __init__.py dev.py test.py core/ # all source code db/ migrations/ __init__.py alembic.ini env.py versions/

Cuando intento ejecutar lo siguiente desde mi directorio db , veo

File "migration/env.py", line 55, in run_migrations_online from configuration import app, db ImportError: No module named configuration

Probé la solución mencionada en Solicitud de un ejemplo de trabajo de alambique simple para Generación automática de migraciones , pero no funciona para mí.

Mi método en env.py run_migrations_online() con el cambio es

def run_migrations_online(): """Run migrations in ''online'' mode. In this scenario we need to create an Engine and associate a connection with the context. """ import os import sys sys.path.append(os.getcwd()) from configuration import app, db alembic_config = config.get_section(config.config_ini_section) alembic_config[''sqlalchemy.url''] = app.config[''SQLALCHEMY_DATABASE_URI''] target_metadata = db.metadata engine = engine_from_config( alembic_config, prefix=''sqlalchemy.'', poolclass=pool.NullPool) connection = engine.connect() context.configure( connection=connection, target_metadata=target_metadata ) try: with context.begin_transaction(): context.run_migrations() finally: connection.close() if context.is_offline_mode(): run_migrations_offline() else: run_migrations_online()

¿Cómo puedo arreglar esto?


Usted dice que ejecuta algo así como alembic migrate --autogenerate -m ''migration description'' desde el directorio project/db y obtener ImportError , ¿verdad?

Si es así, el problema es obvio.

Consulte: intenta importar el módulo de configuration y se producen errores. Luego coloca sys.path.append(os.getcwd()) ; en otras palabras, agrega el directorio actual a la ruta del sistema. Pero, ¿cuál es el directorio actual? Es project/db , y no tiene configuration módulo de configuration debajo, así que continúas obteniendo ImportError .

La solución es agregar a la ruta del sistema directorio principal: project , que contiene el módulo de configuration . Al igual que:

parent_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) sys.path.append(parent_dir)


export PYTHONPATH=<path_to_project> y ejecuté el comando nuevamente y se ejecutó con éxito