首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UniqueConstraint在两个或多个列上定义SQLModel?

如何使用UniqueConstraint在两个或多个列上定义SQLModel?
EN

Stack Overflow用户
提问于 2022-09-08 17:23:50
回答 1查看 174关注 0票数 1

使用SQLAlchemy可以在两个或多个列上创建约束使用UniqueConstraint声明。

使用SQLModel最惯用的方法是什么?

例如:

代码语言:javascript
复制
from sqlmodel import SQLModel, Field


class SubAccount(SQLModel):
    id: int = Field(primary_key=True)
    name: str
    description: str
    user_id: int = Field(foreign_key="user.id")

如何使name对于给定的user_id是唯一的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-08 17:59:24

从现在起,完全一样。SQLModel元类继承了SQLAlchemy DeclarativeMeta类的大量内容。在许多方面,您可以像对待SQLModel SQLAlchemy基类那样对待SQLAlchemy子类。示例:

代码语言:javascript
复制
from sqlmodel import Field, SQLModel, UniqueConstraint, create_engine


class User(SQLModel, table=True):
    id: int = Field(primary_key=True)
...


class SubAccount(SQLModel, table=True):
    __table_args__ = (
        UniqueConstraint("name", "user_id", name="your_unique_constraint_name"),
    )
    id: int = Field(primary_key=True)
    name: str
    description: str
    user_id: int = Field(foreign_key="user.id")


if __name__ == '__main__':
    engine = create_engine("sqlite:///:memory:", echo=True)
    SQLModel.metadata.create_all(engine)

SQLModel甚至从SQLAlchemy显式地重新导入兼容的类/函数,以表明它们可以按照您期望的方式从SQLAlchemy中使用。

这并不是说这适用于一切。差得远呢。该项目仍处于早期阶段。但在这种情况下确实如此。

下面是创建表的相应SQL输出:

代码语言:javascript
复制
CREATE TABLE subaccount (
    id INTEGER NOT NULL, 
    name VARCHAR NOT NULL, 
    description VARCHAR NOT NULL, 
    user_id INTEGER NOT NULL, 
    PRIMARY KEY (id), 
    CONSTRAINT your_unique_constraint_name UNIQUE (name, user_id), 
    FOREIGN KEY(user_id) REFERENCES user (id)
)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73652967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档