2015-07-08 2 views
4

У меня есть сценарий обновления alembic, который создает таблицу, однако я не хочу, чтобы она создавала таблицу, если она уже существует.alembic create_table, проверьте, существует ли таблица

Согласно alembic doc, я могу передать ключевые слова арг для op.create_tables, которые являются приемлемыми для sqlalchemy.schema.table, поэтому я использую keep_existing ключевое слово:

op.create_table('foo_model', 
    sa.Column('foo_id', sa.Integer(), nullable=False), 
    sa.Column('foo_str', sa.String(length=255), nullable=True), 
    sa.PrimaryKeyConstraint('foo_id'), 
    keep_existing= True 
) 

Однако я все еще получаю таблица уже существует ошибка ,

sqlalchemy.exc.InternalError: (InternalError) (1050, u"Table 'foo_model' already exists") '\nCREATE TABLE foo_model (\n\tfoo_id INTEGER NOT NULL AUTO_INCREMENT, \n\tfoo_str VARCHAR(255), \n\tPRIMARY KEY (foo_id)\n)\n\n'() 

ответ

-3

Возможно, это потому, что таблица уже существует. Просто удалить таблицу из базы данных с помощью psql и работает drop table foo_model;

+1

Это не решение проблемы с тем, что миграция выполняется отлично сама по себе, когда таблица уже существует. (плюс стоп-таблица потеряет данные) –

0

Как уже было сказано в другом месте (Check if a table column exists in the database using SQLAlchemy and Alembic) перегонный куб должен отражать полное состояние вашей базы данных, это означает, что он будет автоматически знать, если таблица существует.

Удостоверьтесь, что вы определили обновление и понижение, так что, если обновление создает понижение, оно удаляет его.

Если вы сделаете это, вы можете просто «понизить» до предыдущей версии и снова выполнить обновление, и это сработает. Используйте autogenerate в редакции, чтобы создать начальное состояние.

Смежные вопросы