Я новичок в такой серьезности, что могу упустить момент из его концепции, но вот в чем вопрос.
У меня есть несколько таблиц sqlalchemy в приложении с флягами, например:
class Data(Base):
__tablename__ = 'Data'
__table_args__ = {'schema': 'schema'}
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
Я инициализирую свои таблицы:
Base = declarative_base()
engine = create_engine(db_link, pool_size=100, max_overflow=0)
Base.metadata.create_all(engine)
Session = sessionmaker()
Session.configure(bind=engine)
К этому моменту я создал таблицы в своей базе данных вручную, и все работало хорошо.Чтобы потом работать продуктивно с моим проектом, я хочу иметь возможность перенести мою базу данных с помощью alembic.Поскольку некоторые таблицы, которые я буду использовать (в другой схеме), доступны только для чтения и созданы другой программой, я хочу перенести только некоторые таблицы sqlalchemy.Поэтому мой сценарий обновления выглядит (созданный alembic revision --autogenerate):
revision = 'bb1d39b7eee1'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('Data',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(), nullable=False),
sa.PrimaryKeyConstraint('id'),
schema='schema'
)
...
, когда я теперь использую пустую базу данных для переноса своей схемы в:
alembic upgrade head
я получаюследующая ошибка:
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42S01', "[42S01] [M
icrosoft][SQL Server Native Client 11.0][SQL Server]There is already an object n
amed 'Data' in the database. (2714) (SQLExecDirectW)") [SQL: '\nCREATE TABLE schema.
[Data] (\n\tid INTEGER NOT NULL IDENTITY(1,1), \n\tname VARCHAR(max) NOT NULL, \
\n\tPRIMARY KEY (id), \n\tCHECK (IN (0, 1))\n)\n\n']
Похоже, alembic автоматически создает все таблицы и затем пытается снова создать эти таблицы в моем скрипте ревизии.Если это правда, как я могу сказать Alembic, что он не должен создавать какие-либо таблицы автоматически и запускать только те сценарии, которые я создаю?