简述 SQLAchemy 中如何设置联合唯一索引?
参考答案:
在SQLAlchemy中,你可以使用UniqueConstraint
来设置联合唯一索引。以下是一个简单的例子:
from sqlalchemy import create_engine, Column, Integer, String, UniqueConstraint, MetaData, Table
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('email', String),
UniqueConstraint('name', 'email', name='uq_name_email')
)
engine = create_engine('sqlite:///example.db')
metadata.create_all(engine)
在这个例子中,我们创建了一个名为users
的表,其中name
和email
列有一个联合唯一约束。这意味着在表中,任何两行都不能有相同的name
和email
组合。
UniqueConstraint
的第一个和第二个参数是要包含在联合唯一约束中的列的名称,name
参数是这个约束的名称。
metadata.create_all(engine)
语句将创建表并将联合唯一约束添加到数据库中。
注意,联合唯一索引和联合唯一约束在SQLAlchemy中有所不同。联合唯一索引主要用于优化查询性能,而联合唯一约束则用于保证数据的完整性。在上述例子中,我们实际上创建的是一个联合唯一约束,而不是一个联合唯一索引。如果你需要创建一个联合唯一索引,可以使用Index
类,如下所示:
from sqlalchemy import create_engine, Column, Integer, String, Index, MetaData, Table
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('email', String),
UniqueConstraint('name', 'email', name='uq_name_email')
)
# 创建联合唯一索引
index_name = Index('ix_name_email', users.c, users.c.name, users.c.email, unique=True)
engine = create_engine('sqlite:///example.db')
metadata.create_all(engine)
index_name.create(engine)
在这个例子中,我们首先创建了一个联合唯一约束,然后创建了一个名为ix_name_email
的联合唯一索引,该索引包含name
和email
列,并设置为唯一。最后,我们使用index_name.create(engine)
语句将索引添加到数据库中。