Defining an Index() or UniqueConstraint() within a Table(...) adds the
"schema item" to the table.  Defining an Index() by passing one or
more columns also adds the Index to the Table.

However, defining a unique constraint by itself and passing columns
does *not* add the constraint to the corresponding table as with
Index().

Is this known?  Is it intentional?  (It took me a while to figure out
the two behaved differently)


##############################################
from sqlalchemy import *
engine = create_engine('sqlite:///', echo=True)
metadata = MetaData(engine)

#########
table=Table("table", metadata,
    Column("id_a", Unicode(255), primary_key=True),
    Column("id_b", Unicode(255)),
    Index('id_b'),
    UniqueConstraint('id_a','id_b'),
)

# passes:
assert len(table.indexes) == 1
# passes:
assert any(type(a) == UniqueConstraint for a in table.constraints)

#########
tableb=Table("tableb", metadata,
    Column("id_a", Unicode(255), primary_key=True),
    Column("id_b", Unicode(255)),
)
Index('tablebindex', tableb.c.id_b)
UniqueConstraint('tablebconstraint', tableb.c.id_a, tableb.c.id_b)

# passes:
assert len(tableb.indexes) == 1
# fails:
assert any(type(a) == UniqueConstraint for a in tableb.constraints)
##############################################

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to