Я использую sqlalchemy для определения схемы и alembic для управления миграциями. Моя файловая структура выглядит так:
db
|----model
| |------ __init__.py
| |------ tableone.py
|
|----assorted alembic files...
Моя модель __init__.py использует декларативную базу для сбора всех определений таблицы:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
import db.model.tableone
И тогда определение моей таблицы выглядит следующим образом, tableone.py:
from ..model import Base
from sqlalchemy import (Column, Integer)
class TableOne(Base):
__tablename__ = 'event'
column_one = Column(Integer, nullable=False, primary_key=True)
Alembic, кажется, понимает эту структуру и может успешно генерировать миграции. Однако, если в другом коде, таком как мои тесты, я импортирую свою базу, в ней нет таблиц. Вот интерактивный пример из каталога db
с каталогом, содержащим db
, добавленным в мой PYTHONPATH
:
import model
model.Base.metadata.tables
>>>> immutabledict({})
Почему в метаданных Base
нет таблиц? Я прочитал документы по sqlalchemy и вижу, что иногда декларативные базы привязаны к движку, но похоже, что это для создания таблиц, чего я не хочу делать. Я хочу видеть только метаданные, но они пустые