I had an unnamed UniqueConstraint, and autogenerated upgrade scripts that passed in None as the name - these worked perfectly. Now I am discovering that the downgrade doesn't work, as there is no name to refer to the constraint (i.e. "sqlalchemy.exc.CompileError: Can't emit DROP CONSTRAINT for constraint UniqueConstraint(); it has no name")
So, I'm trying to add a name in the model, and edit the migration scripts accordingly. My strategy was this: - the upgrade function would add the constraint with a name in future - the downgrade function needs to be able to delete the constraint whatever it was called The first is easy enough and seems to have no problems. The second is tricky; if the name passed to drop_constraint is wrong, it raises the expected error (e.g. sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) constraint "provider_name_user_id_key" of relation "user_authentication_method" does not exist) What I'd like to do, is catch that exception, and try another name (e.g. the name that I know was autogenerated, in this case 'user_authentication_method_pkey') - however, attempting to catch the error and perform a further operation emits a Postgres internal error that suggests I need to end the current transaction and start a new one (i.e. sqlalchemy.exc.InternalError: (psycopg2.InternalError) current transaction is aborted, commands ignored until end of transaction block) and I can't find out how to do that. I tried calling rollback() on a session created around the return value of get_bind() but the error was the same. To complicate matters, one of the possible DBs is SQLite so I have to do this via op.batch_etc. Thankfully that data is not essential so deleting the whole DB is an option there - not so much for the Postgres data. So my questions are: 1) How can I handle this drop_constraint call when we didn't specify a constraint name in the first place? 2) If the best way is for me to just attempt to drop constraints by name, trying several names, how can I catch or avoid the first error and try subsequent constraint names? Thanks, Ben -- 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.