我正在做一个 Python 项目。在这个项目中,我使用 sqlalchemy。有两个表:notes 和 tags 以及创建多对多关系的第三个表 notes_tags。 第三个表是这样定义的:
class NotesTags(Base):
__tablename__ = 'notes_tags'
id = Column(Integer, primary_key=True)
note_id = Column('note_id', Integer, ForeignKey('notes.id'))
note = relationship(Notes)
tag_id = Column('tag_id', Integer, ForeignKey('tags.id'))
tag = relationship(Tags)
当我将记录保存到该表时,我是这样做的:
notesTags.tag = newtag
notesTags.note = givenNote
session.add(notesTags)
在我的数据库中,我得到了这样的信息:
+----+---------+--------+
| id | note_id | tag_id |
+----+---------+--------+
| 1 | 83 | 1 |
| 2 | 108 | 1 |
| 3 | 114 | 1 |
| 4 | 119 | 1 |
| 5 | 124 | 1 |
+----+---------+--------+
5 rows in set (0.000 sec)
但是如果我再次运行这个过程,记录会重复,这意味着我会得到这样的东西:
+----+---------+--------+
| id | note_id | tag_id |
+----+---------+--------+
| 1 | 83 | 1 |
| 2 | 108 | 1 |
| 3 | 114 | 1 |
| 4 | 119 | 1 |
| 5 | 124 | 1 |
| 6 | 83 | 1 |
| 7 | 108 | 1 |
| 8 | 114 | 1 |
| 9 | 119 | 1 |
| 10 | 124 | 1 |
+----+---------+--------+
10 rows in set (0.000 sec)
这不是想要的结果。如何确保记录不会重复? 我想到了以下几点: a) 在我保存记录之前,检查是否已经存在具有给定 note_id - tag_id 的记录。 b) 为使用 note_id 和 tag_id 的表创建复合 id
我不确定如何创建第二个,也不知道什么是实现的最佳选择,或者我如何才能实现这一点。
如果有任何区别,我将连接到 mysql 数据库。
任何帮助将不胜感激。