from sqlalchemy import Table, MetaData, Index, select, Column, \
- ForeignKeyConstraint, cast, CheckConstraint
+ ForeignKeyConstraint, PrimaryKeyConstraint, cast, CheckConstraint
from sqlalchemy import types as sqltypes
from sqlalchemy import schema as sql_schema
from sqlalchemy.util import OrderedDict
if not const.name:
raise ValueError("Constraint must have a name")
try:
- del self.named_constraints[const.name]
+ const = self.named_constraints.pop(const.name)
except KeyError:
if _is_type_bound(const):
# type-bound constraints are only included in the new
# Operations.implementation_for(alter_column)
return
raise ValueError("No such constraint: '%s'" % const.name)
+ else:
+ if isinstance(const, PrimaryKeyConstraint):
+ for col in const.columns:
+ self.columns[col.name].primary_key = False
def create_index(self, idx):
self.new_indexes[idx.name] = idx
from sqlalchemy import Integer, Table, Column, String, MetaData, ForeignKey, \
UniqueConstraint, ForeignKeyConstraint, Index, Boolean, CheckConstraint, \
- Enum, DateTime
+ Enum, DateTime, PrimaryKeyConstraint
from sqlalchemy.engine.reflection import Inspector
from sqlalchemy.sql import column, text, select
from sqlalchemy.schema import CreateTable, CreateIndex
)
return ApplyBatchImpl(t, table_args, table_kwargs, False)
+ def _pk_fixture(self):
+ m = MetaData()
+ t = Table(
+ 'tname', m,
+ Column('id', Integer),
+ Column('x', String()),
+ Column('y', Integer),
+ PrimaryKeyConstraint('id', name="mypk")
+ )
+ return ApplyBatchImpl(t, (), {}, False)
+
def _literal_ck_fixture(
self, copy_from=None, table_args=(), table_kwargs={}):
m = MetaData()
dialect='mysql'
)
+ def test_drop_pk(self):
+ impl = self._pk_fixture()
+ pk = self.op.schema_obj.primary_key_constraint("mypk", "tname", ["id"])
+ impl.drop_constraint(pk)
+ new_table = self._assert_impl(impl)
+ assert not new_table.c.id.primary_key
+ assert not len(new_table.primary_key)
+
class BatchAPITest(TestBase):
__requires__ = ('sqlalchemy_08', )