Skip to main content
 首页 » 编程设计

python之使用 peewee 为带有外键的表创建唯一索引

2025年05月04日14zhwl

假设我有一个名为 TBL_ACCOUNT 的表,其中包含我的所有用户,还有一个名为 TBL_EMAIL_SUBSCRIPTION 的表,其中包含用户订阅的提要。我正在努力使每个用户+提要组合只能有一个条目,因此 user1 只能订阅 feed1 一次,但 user1 可以同时订阅 feed1 和 feed2。

这是我的模型的样子:

class TBL_ACCOUNT(BaseModel): 
    USERNAME = CharField(unique=True) 
    PASSWORD = CharField() 
    EMAIL = CharField(unique=True) 
 
class TBL_EMAIL_SUBSCRIPTION(BaseModel): 
    USER = ForeignKeyField(TBL_ACCOUNT) 
    FEED = CharField() 
 
    class Meta: 
        indexes = (("USER_id", "FEED", True)) 

我也试过只使用“USER”作为索引,但没有成功,因为数据库仍然收到重复项。

请您参考如下方法:

请参阅 peewee 文档:http://docs.peewee-orm.com/en/latest/peewee/models.html#indexes-and-constraints
在您的情况下,它应该如下所示:

class Meta: 
    indexes = ( 
        (("USER_id", "FEED"), True), 
    ) 

注意逗号的使用!它们非常重要,因为索引是元组的元组。