繁体   English   中英

如何定义跨三列的唯一约束?

How is a unique constraint across three columns defined?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

下面的EventInvitation模型是一个事件的简单邀请,从一个用户发送给另一个用户。 我想确保邀请在三列中是唯一的:to_user、from_user 和 event。

class EventInvitation(db.Model):
    __tablename__ = 'event_invitations'

    id = db.Column(db.Integer, primary_key = True)

    event_id = db.Column(db.Integer, db.ForeignKey('events.id'))
    event = db.relationship('Event',  foreign_keys=[event_id])
    created = db.Column(db.DateTime(), default=datetime.now)
    updated = db.Column(db.DateTime(), default=datetime.now,onupdate=datetime.now)

    from_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    from_user = db.relationship('User',  foreign_keys=[from_id])

    to_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    to_user = db.relationship('User',  foreign_keys=[to_id])

    cstrt = db.UniqueConstraint('event_id', 'from_id','to_id', name='uix_1')

我试过这个cstrt列,但它不起作用。 该约束应该适用于 SQLite,以及生产中的 MySQL。 我如何定义这个唯一约束?

2 个回复

您需要将约束添加到表中,而不是模型中。 使用声明来做到这一点:

class EventInvitation(db.Model):
    # ...
    __table_args__ = (
        db.UniqueConstraint(event_id, from_id, to_id),
    )

如果该表已在数据库中创建,您将需要删除该表并再次运行db.create_all() ,或使用 Alembic 通过迁移更改现有表。

我不同意接受的答案。 这不是代码不起作用的原因。

它不起作用的原因是因为您引用了列的名称。

如果你写:

    cstrt = db.UniqueConstraint(event_id, from_id, to_id, name='uix_1')

一切都会好起来的。

当然,它也可以使用 table_args:

    __table_args__ = (
    db.UniqueConstraint(event_id, from_id, to_id),
)
1 跨两列的Postgres唯一约束?

这是我当前的数据库结构: 我想确保Col2中的任何条目仅用于Col1的相同条目。 例如,数据库将允许您添加以下行: 但不是这个: 有没有办法使用唯一索引来强制执行此操作? 通常,唯一性要求特定组合对于整个表都是唯一的(即(1,abc123)最多显示一次)。 我无 ...

3 如何使用Apache Cayenne定义多列唯一约束?

与规范化数据库模型设计中的常见情况一样,除了自动生成的表的主键约束(Apache Cayenne允许我通过建模UI定义)之外,我还想定义一个多列唯一约束。 是否可以告诉Cayenne,特定列或一组列对于给定的表必须是唯一的? EG-一个app_user表定义为(PostgreSQL语法) ...

4 JPA - 定义多列唯一约束

是否可以使用JPA定义多个唯一约束。 Foo.id应该是唯一的{Foo.name,Foo.type}的组合。 防爆。 id,名称,类型 1,“name1”,“type1” 2,“name1”,“type2” 3,“name1”,“type1”//错误重复的id = 1 ...

5 多列的唯一约束

我正在使用 SEAM 2/Hibernate 和 PostgreSQL 9 数据库。 我有下表 我想添加一个约束,以确保每个新条目都具有 active_band_user 和 active_band_date 的唯一组合。 每秒可能有很多尝试插入,所以我需要尽可能高效,是否有可以在实体映射中使 ...

9 跨列的多个值的 Postgres 唯一约束

我的一张桌子有一个棘手的唯一性要求。 假设我们有一桌狗。 狗住在房子里。 狗的名字在房子里必须是唯一的。 还有一个“主”房子,任何狗都不能和主房子里的狗有相同的名字。 例如,house_id 0 是“主”房子: 如何创建对此建模的唯一性约束? 我在想有一种方法可以通过排除约束来做到这一 ...

10 如何在 SQL (Oracle) 中执行跨列唯一约束

如何在具有两列的 Oracle-DB 中使用唯一约束,以便在其中一个或另一个中不得出现重复项。 假设这个表 我认为一个新行不允许在列 "A" 中具有与列 "A"或 "B" 中的值重复的值。 在上面的示例中:我可以向“A”列添加 5,但不能添加 1、2、3 或 4。 我的想法是做这样的事情: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM