欢迎访问宙启技术站
智能推送

SQLAlchemy.schema中的Unique约束使用方法

发布时间:2023-12-17 17:22:44

SQLAlchemy是一种流行的Python ORM框架,它提供了Schema模块来定义数据库表结构。其中一个常用的约束是Unique约束,用于确保表中的某列具有 值。

在SQLAlchemy中,可以使用UniqueConstraint类来定义Unique约束。它接受一个或多个列作为参数,并可选地指定约束的名称。

下面是一个示例,展示了如何在SQLAlchemy中使用Unique约束:

from sqlalchemy import Column, Integer, String, UniqueConstraint
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)
    
    # 定义Unique约束
    __table_args__ = (
        UniqueConstraint('name', 'email', name='uq_name_email'),
    )

在上面的示例中,我们定义了一个名为User的ORM模型,其对应的表名为users。它有三个列:id、name和email。我们通过在__table_args__属性中定义UniqueConstraint来添加Unique约束。

在这个示例中,我们对name和email列定义了一个名为uq_name_email的Unique约束。这意味着表中的每个name和email的组合必须是 的。

如果我们要在数据库中创建这个表,可以使用SQLAlchemy的操作来执行DDL语句,如下所示:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 创建数据库引擎
engine = create_engine('sqlite:///test.db')

# 创建表结构
Base.metadata.create_all(engine)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 插入数据(不违反Unique约束)
user1 = User(name='John', email='john@example.com')
session.add(user1)
session.commit()

# 插入数据(违反Unique约束)
user2 = User(name='John', email='john@example.com')
session.add(user2)
session.commit()  # 会抛出      约束错误

# 查询数据
users = session.query(User).all()
for user in users:
    print(user.name, user.email)

# 关闭会话
session.close()

在上面的示例中,我们首先创建了一个数据库引擎,并使用Base.metadata.create_all(engine)创建了表结构。

然后,我们创建了一个会话,并往表中插入了两条数据。 条插入操作不违反Unique约束,所以插入成功。第二条插入操作违反了Unique约束,所以会抛出 约束错误。

最后,我们通过查询来验证插入数据的效果,并关闭了会话。

总结: 在SQLAlchemy中,可以通过UniqueConstraint类来定义Unique约束。通过在ORM模型的__table_args__属性中添加UniqueConstraint来使用Unique约束。通过创建数据库引擎和会话,可以执行DDL语句来创建表和插入数据。实际使用中,我们可以根据需要,在表的不同列上定义不同的Unique约束。