首页 > 解决方案 > 支持 M2M 关联表中的重复条目

问题描述

我正在使用 flask 和 flask-db 开发一个 SQL-Alchemy 应用程序,并且一直在为如何解决这个问题而摸不着头脑。我的模型如下所示:

class event_schematics_map():
    event_schematics_table = db.Table(
        'event_schematics_table',
        db.Column('fk_schematic_id', db.Integer, db.ForeignKey('schematics.id')),
        db.Column('fk_event_id', db.Integer, db.ForeignKey('events.id'))
    )

class Events(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), index=True, unique=False)
    date = db.Column(db.String(120), unique=False)
    owner = db.Column(db.Integer, db.ForeignKey('user.id'))
    schematics = db.relationship('Recipe', secondary=event_schematics_map.event_schematics_table, backref='schematic')

class Schematics(db.Model):
    __tablename__ = 'schematics'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.VARCHAR(70), index=True)
    schematics_description = db.Column(db.String(1024), index=True)
    creator_id = db.Column(db.Integer, db.ForeignKey('user.id'))

原理图被创建并位于 O2M 的许多方面,上面没有单独显示一个用户表。映射表用作 M2M 关系中的粘合剂。

目前我正在为每个事件添加新的原理图并像这样更新关联表:events.schematics.append(SomeNewSchematic)在我尝试输入完全相同的原理图的多个实例之前,它工作正常,如下所示:

schem1 = Schematics(name='TheOnlySchematic')
schem2 = Schematics(name='TheOnlySchematic')
event.schematics.append(schem1)
event.schematics.append(schem2)
etc

在这种情况下,我只能申请一个,因为我认为该条目被重复了。我相信这可以通过关联表 event_schematics_map 中的一个附加字段来解决,但不确定我是否忽略了一些更简单的东西或如何实现它。

实际上,我想支持完全相同模型的多个条目

我相信我的问题与我可以将两次相同的对象附加到 sqlalchemy 中的检测列表中的问题相同- 但我看不到解决方案。

真的很感激任何指针或知道如何解决这个问题。

标签: pythonsqlalchemy

解决方案


谢谢你的回复,让我直接在这里,

你说得对,重复的条目没有意义。

我最终通过使用其他答案中讨论的关联表来跟踪每个原理图的出现来解决这个问题。


推荐阅读