def test_add_fk_after_add_column(self): exist_meta = sqlalchemy.MetaData() sqlalchemy.Table('a', exist_meta, sqlalchemy.Column('id', sqlalchemy.Integer)) sqlalchemy.Table('b', exist_meta, sqlalchemy.Column('id', sqlalchemy.Integer)) model_meta = sqlalchemy.MetaData() sqlalchemy.Table('a', model_meta, sqlalchemy.Column('id', sqlalchemy.Integer)) column = sqlalchemy.Column('a_id', sqlalchemy.Integer, sqlalchemy.ForeignKey('a.id')) table = sqlalchemy.Table('b', model_meta, sqlalchemy.Column('id', sqlalchemy.Integer), column) fkc = sqlalchemy.ForeignKeyConstraint(['a_id'], ['a.id'], table=table) addcolumn = sa_migration.AddColumn('b', column, desired_phase='migrate') addfk = sa_migration.AddForeignKey(fkc) scheduler = sa_migration.Scheduler() scheduler.add(addfk) scheduler.add(addcolumn) expand, migrate, contract = scheduler.schedule() self.assertEqual([], expand) self.assertEqual([addcolumn, addfk], migrate) self.assertEqual([], contract)
def test_add_foreign_key(self): meta = sqlalchemy.MetaData() a = _table('a', meta, sqlalchemy.Column('id', sqlalchemy.Integer), sqlalchemy.UniqueConstraint('id')) b = _table('b', meta, sqlalchemy.Column('a_id', sqlalchemy.Integer)) meta.create_all(self.engine) fkc = sqlalchemy.ForeignKeyConstraint([b.c.a_id], [a.c.id], name='b_a_id_fk') op = sa_migration.AddForeignKey(fkc) op.execute(self.ddlop) table = oslodbutils.get_table(self.engine, 'b') fkcs = {c.name: c for c in table.constraints if isinstance(c, sqlalchemy.ForeignKeyConstraint)} self.assertIn('b_a_id_fk', fkcs) columns = [(fk.parent.name, fk.column.name) for fk in fkcs['b_a_id_fk'].elements] self.assertEqual([('a_id', 'id')], columns)