Hi, I have a single table in my sqlite database for which I am using alembic for migration. After the initial revision (creating table and columns), I needed to modify the models so that some of the columns allowed NULL.
My original models.py looks like: # models.py ###########################################33 from sqlalchemy import (BigInteger, Column, Integer, SmallInteger, String) from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.schema import MetaData convention = { "ix": 'ix_%(column_0_label)s', "uq": "uq_%(table_name)s_%(column_0_name)s", "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", "pk": "pk_%(table_name)s" } mymetadata = MetaData(naming_convention=convention) Base = declarative_base(metadata=mymetadata) class MyBase(Base): __abstract__ = True __table_args__ = {'mysql_charset': 'utf8', 'mysql_engine': 'InnoDB', 'sqlite_autoincrement': 'True'} class TRequest(MyBase): __tablename__ = "trequests" id_ = Column("id", BigInteger().with_variant(Integer, "sqlite"), primary_key=True) req_uuid = Column(String(32), unique=True, index=True, nullable=False) ip1 = Column(String(15), nullable=True) ip2 = Column(String(15), nullable=True) port1 = Column(Integer, nullable=True) port2 = Column(Integer, nullable=True) proto = Column(String(3), nullable=True) tstamp = Column(Integer, nullable=True) win = Column(SmallInteger, nullable=False) status = Column(SmallInteger) status_changed = Column(Integer) accessed = Column(Integer) data_file = Column(String(255)) pcap_file = Column(String(255)) # End File############################################## req_uuid has a uniuq index which is named 'ix_trequests_req_uuid' per the naming convention In my base revision script, the upgrade() function is: def upgrade(): ### commands auto generated by Alembic - please adjust! ### op.create_table('trequests', sa.Column('id', sa.BigInteger().with_variant(sa.Integer, "sqlite"), nullable=False), sa.Column('req_uuid', sa.String(length=32), nullable=False), sa.Column('ip1', sa.String(length=15), nullable=False), sa.Column('ip2', sa.String(length=15), nullable=False), sa.Column('port1', sa.Integer(), nullable=False), sa.Column('port2', sa.Integer(), nullable=False), sa.Column('tstamp', sa.Integer(), nullable=False), sa.Column('proto', sa.String(length=3), nullable=False), sa.Column('win', sa.SmallInteger(), nullable=False), sa.Column('status', sa.SmallInteger(), nullable=True), sa.Column('accessed', sa.Integer(), nullable=True), sa.Column('status_changed', sa.Integer(), nullable=True), sa.Column('data_file', sa.String(length=15), nullable=True), sa.Column('pcap_file', sa.String(length=15), nullable=True), sa.PrimaryKeyConstraint('id', name=op.f('pk_trequests')), mysql_charset='utf8', mysql_engine='InnoDB', sqlite_autoincrement=True ) op.create_index(op.f('ix_trequests_req_uuid'), 'trequests', ['req_uuid'], unique=True) # End ########################### Now, I am adding a new revision to remove nullable=True from some columns. The relevant upgrade function is from net_transcript.db.models import convention as naming_convention def upgrade(): ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table('trequests', schema=None, naming_convention=naming_convention) as batch_op: batch_op.alter_column('port1', existing_type=sa.INTEGER(), nullable=True) batch_op.alter_column('port2', existing_type=sa.INTEGER(), nullable=True) batch_op.alter_column('proto', existing_type=sa.VARCHAR(length=3), nullable=True) ### end Alembic commands ### # End ####################################### However, on running the command I get an OperationalError (sqlite3.OperationalError) index ix_trequests_req_uuid already exists [SQL: u'CREATE UNIQUE INDEX ix_trequests_req_uuid ON _alembic_batch_temp (req_uuid)'] I looked at the source and in https://bitbucket.org/zzzeek/alembic/src/459549c9ab7fef91b2dc8986bc0643bb2f6ec0c8/alembic/operations/batch.py?at=master&fileviewer=file-view-default#batch.py-170 the Index is being defined by same name. I commented this code block and the migration succeeded without an error. Is this a bug or am I doing something wrong? Regards, Dheeraj -- You received this message because you are subscribed to the Google Groups "sqlalchemy-alembic" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy-alembic+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.