On 9/18/15 7:43 PM, Sergi Pons Freixes wrote:
Hi everybody,

I am experiencing the same issue commented here: https://bitbucket.org/zzzeek/alembic/issues/293/alembic-autogenerate-creates-endless

In my case, I have the model:
-----------8<--------------
...
class EmailAttachment(Base):
    __tablename__ = 'email_attachment'
    __table_args__ = table_args

email_message_id = Column(ForeignKey(EmailMessage.id), nullable=False)
filestorage_file_id = Column(Integer, nullable=False)

email_message = relationship(EmailMessage, backref='email_attachments')

def __init__(self, email_message_id=None, email_message=None,
filestorage_file_id=None, fxt=None):
self.email_message_id = email_message_id
self.email_message = email_message
self.filestorage_file_id = filestorage_file_id
self.fxt = fxt
...
-----------8<--------------

Where:
-----------8<--------------
...
table_args = {'schema': 'notifications'}

class NotificationsBase:
    @declared_attr
    def id(cls):
        return Column(Integer, primary_key=True)

    @declared_attr
    def fxt(cls):
        return Column(String, nullable=True)

    @classmethod
    def get_one(cls, **kwargs):
        query = DBSession.query(cls)
        for k, v in kwargs.items():
            query = query.filter(getattr(cls, k) == v)
        return query.one()

    def __repr__(self):
        return "<%s id=%s>" % (self.__class__.__name__, self.id)


Base = declarative_base(cls=NotificationsBase)
...
-----------8<--------------


Running 'alembic -c development.ini revision -m "upgrade" --autogenerate' without any change to the model, alembic insists on dropping the foreign key and recreating it afterwards. It is happening to all the foreign keys of all the models of the project. The generated script looks like:
-----------8<--------------
...
def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('email_attachment_email_message_id_fkey', 'email_attachment', type_='foreignkey') op.create_foreign_key(None, 'email_attachment', 'email_message', ['email_message_id'], ['id'], source_schema='notifications', referent_schema='notifications')
...
-----------8<--------------

For more information, my env.py has:
-----------8<--------------
...

target_metadata = Base.metadata

def include_symbol(tablename, schema):
    return schema == table_args['schema']

...

def run_migrations_online():

    connection = engine.connect()
    context.configure(
        connection=connection,
        target_metadata=target_metadata,
        include_schemas=True,
        include_symbol=include_symbol,
        version_table_schema='public'
    )

    try:
        with context.begin_transaction():
            context.run_migrations()
    finally:
        connection.close()

if context.is_offline_mode():
    run_migrations_offline()
else:
    run_migrations_online()
-----------8<--------------

And all this with SQLAlchemy 1.0.8, Alembic 0.8.2 and PostgreSQL 9.3.7. Any clue of what could be the source of the problem?
what is your search_path set to ? see http://docs.sqlalchemy.org/en/rel_1_0/dialects/postgresql.html#remote-schema-table-introspection-and-postgresql-search-path for background on this. It is highly recommended that search_path remain set on "public" and that you do *not* refer to the "public" name directly in any table definitions. Feel free to share a model that includes all the tables and constraints in question as well.






Cheers,
Sergi



--
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 <mailto:sqlalchemy-alembic+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.

--
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.

Reply via email to