I have an alembic upgrade script that creates a table, however I don't want it to create the table if it already exists.
According to the alembic doc, I can pass in keyword args to op.create_tables
that are acceptable to sqlalchemy.schema.table, so I'm using the keep_existing
keyword:
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
)
However I'm still getting the table already exists error.
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' ()
You can get the list of existing tables like this:
from sqlalchemy.engine.reflection import Inspector
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = inspector.get_table_names()
and then check if table already exists or not
if table_name not in tables:
op.create_table()