使用Flask和SQLAlchemy保存Many2Many关系

时间:2014-09-21 15:23:21

标签: python sql flask flask-sqlalchemy

我正在使用带有SQLAlchemy的Flask。我有活动,他们有与之相关的标签。标签可以属于许多事件,事件可以有许多标签。我有三个表,事件,标签和event_tag,这是一个连接表。我可以很好地检索我的数据 - 包括检索相关标签,但我似乎无法更新与事件关联的标签。

我有以下设置:

...

event_tag = db.Table('event_tag',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('event_id', db.Integer, db.ForeignKey('event.id'))
)
class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    note = db.Column(db.Text())
    link = db.Column(db.String(255))
    date_from = db.Column(db.Date())
    date_to = db.Column(db.Date())
    milestone = db.Column(db.Boolean)
    tags = db.relationship('Tag', secondary=event_tag, backref=db.backref('events', lazy='dynamic'))

    def __init__(self, name, note, link, date_from, date_to, milestone):
        self.name = name
        self.note = note
        self.link = link
        self.date_from = date_from
        self.date_to = date_to
        self.milestone = milestone
...

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    reference = db.Column(db.String(255))

    def __init__(self, name, reference):
        self.name = name
        self.reference = reference

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是您需要指定主要和次要联接。您可以通过以下方式交换for slots in soup.findAll(attrs={"class" : "pb-15 text-center"}): tags = slots.find("a") for IDS in tags: try: IDS = tags.attrs["id"] except TypeError: else: print (IDS) 来实现。

tags = db.relationship('Tag', secondary=event_tag, backref=db.backref('events', lazy='dynamic'))