使用SQLAlchemy可以在两个或多个列上创建约束使用UniqueConstraint声明。
使用SQLModel最惯用的方法是什么?
例如:
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是唯一的?
发布于 2022-09-08 17:59:24
从现在起,完全一样。SQLModel元类继承了SQLAlchemy DeclarativeMeta类的大量内容。在许多方面,您可以像对待SQLModel SQLAlchemy基类那样对待SQLAlchemy子类。示例:
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输出:
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)
)https://stackoverflow.com/questions/73652967
复制相似问题