Estoy usando SQLAlchemy Migrate para realizar un seguimiento de los cambios en la base de datos y estoy teniendo un problema con la eliminación de una clave externa. Tengo dos tablas, t_new es una tabla nueva, y t_exists es una tabla existente. Necesito agregar t_new, luego agregar una clave foránea a t_exists. Entonces necesito poder revertir la operación (que es donde estoy teniendo problemas).¿Cómo elimino una restricción de clave externa en SQLAlchemy?
t_new = sa.Table("new", meta.metadata,
sa.Column("new_id", sa.types.Integer, primary_key=True)
)
t_exists = sa.Table("exists", meta.metadata,
sa.Column("exists_id", sa.types.Integer, primary_key=True),
sa.Column(
"new_id",
sa.types.Integer,
sa.ForeignKey("new.new_id", onupdate="CASCADE", ondelete="CASCADE"),
nullable=False
)
)
Esto funciona bien:
t_new.create()
t_exists.c.new_id.create()
Pero esto no es así:
t_exists.c.new_id.drop()
t_new.drop()
Tratando de dejar caer la columna de clave externa da un error: 1025, "Error en el cambio de nombre de'. \ my_db_name \ # sql-1b0_2e6 'a'. \ my_db_name \ exists '(errno: 150) "
Si hago esto con SQL sin formato, puedo eliminar el f oreignar manualmente la clave y luego eliminar la columna, pero no he podido averiguar cómo eliminar la clave externa con SQLAlchemy? ¿Cómo puedo eliminar la clave externa y luego la columna?
Para cualquier persona que pueda encontrarse con esto, ForeignKeyConstraint debe importarse de 'migrate' no de' sqlalchemy'. – mjallday