文章内容
2023/6/24 19:02:22,作 者: 黄兵
SQLAlchemy 多字段唯一索引
在 SQLAlchemy 如果有多个字段组成唯一索引,下面是一个示例:
from sqlalchemy import UniqueConstraint class APIToken(db.Model): __tablename__ = 'api_tokens' id = db.Column(db.Integer, primary_key=True) token = db.Column(db.String(32), unique=True, index=True) user_id = db.Column(db.Integer, db.ForeignKey('ip_crawler_users.id')) create_time = db.Column(db.DateTime(timezone=True), server_default=func.now(), index=True) time_updated = db.Column(db.DateTime(timezone=True), onupdate=func.now())
我们需要将 user_id
和 token
组成唯一索引,也就是在一张表里面:user_id
和 token
不能重复出现,我们修改代码如下:
from sqlalchemy import UniqueConstraint class APIToken(db.Model): __tablename__ = 'api_tokens' id = db.Column(db.Integer, primary_key=True) token = db.Column(db.String(32), unique=True, index=True) user_id = db.Column(db.Integer, db.ForeignKey('ip_crawler_users.id')) create_time = db.Column(db.DateTime(timezone=True), server_default=func.now(), index=True) time_updated = db.Column(db.DateTime(timezone=True), onupdate=func.now()) __table_args__ = (UniqueConstraint('token', 'user_id', name='_token_user_id_uc'),)
在上面的代码中,我们在__table_args__
中定义了一个UniqueConstraint
约束,它将token
和user_id
两个字段组合在一起形成一个唯一索引。name='_token_user_id_uc'
用于指定索引的名称,你可以根据需要修改它。
请确保导入了UniqueConstraint
类,例如可以这样导入:
from sqlalchemy import UniqueConstraint
完成这些修改后,当你创建数据库表时,token
和user_id
字段将会形成一个唯一索引。
参考资料:
1、ChatGPT
其它相关推荐:
1、SQLAlchemy Unique Constraints
黄兵个人博客
转载请注明出处:黄兵个人博客 - SQLAlchemy 多字段唯一索引
评论列表