文章内容
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 多字段唯一索引
评论列表