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