Alembic: alembic revision говорит об ошибке импорта

Я пытаюсь интегрировать свой проект Flask с Alembic
Моя структура приложения выглядит

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

Когда я пытаюсь запустить следующее из каталога db , я вижу

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

Я попробовал решение, упомянутое в запросе, как простой пример использования alembic для автоматического создания миграции , но для меня это не работает

Мой метод в env.py run_migrations_online() с изменением

 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() 

Как я могу это исправить?

3 Solutions collect form web for “Alembic: alembic revision говорит об ошибке импорта”

Я export PYTHONPATH=<path_to_project> и снова export PYTHONPATH=<path_to_project> команду, и она успешно работала

Вы говорите, что вы запускаете что-то вроде alembic migrate --autogenerate -m 'migration description' из project/db ImportError и получаете ImportError , не так ли?

Если это так, проблема очевидна.

Смотрите: вы пытаетесь импортировать модуль configuration и это приводит к ошибкам. Затем вы sys.path.append(os.getcwd()) – другими словами, вы добавляете текущий каталог в системный путь. Но каков текущий каталог? Это project/db , и в нем нет модуля configuration , поэтому вы продолжаете получать ImportError .

Решение состоит в том, чтобы добавить в родительский каталог системного пути – project , содержащий модуль configuration . Вот так:

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

Мы столкнулись с одной и той же проблемой, она сводится к тому, что env.py не вызывается ревизией, если не --autogenerate флаг --autogenerate . Вы можете проверить это, поставив оператор печати вверху вашего файла env.py.

Мы работаем над этим, вызывая с --autogenerate затем удаляя сгенерированный код.

  • Alembic: IntegrityError: «столбец содержит пустые значения» при добавлении столбца с нулевым значением
  • Alembic + Sqlalchemy Multi Column Уникальное ограничение
  • alembic и получение последнего вставленного значения
  • Первоначальная миграция Alembic - sqlalchemy
  • Изменение поля Enum с использованием Alembic
  • SQLAlchemy classic mapper "не удалось собрать какие-либо столбцы первичного ключа для отображаемой таблицы", несмотря на наличие первичного ключа?
  • Как выполнять вставки и обновления в сценарии обновления Alembic?
  • Извлечь значения таблицы с помощью alembic и обновить другую таблицу.
  • Python - лучший язык программирования в мире.