【问题标题】:Saving Many2Many relationships using Flask with SQLAlchemy使用 Flask 和 SQLAlchemy 保存 Many2Many 关系
【发布时间】:2014-09-21 15:23:21
【问题描述】:

我将 Flask 与 SQLAlchemy 一起使用。我有事件,它们有与之关联的标签。标签可以属于许多事件,事件可以有许多标签。我有三个表,事件、标签和作为连接表的 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

【问题讨论】:

  • 您如何尝试更新标签?
  • 嗨@dim - 我已经尝试了六种方法,但都没有奏效。这就是我想知道的。
  • 当我们不知道您在做什么时,很难告诉您出了什么问题。

标签: python sql flask flask-sqlalchemy


【解决方案1】:

我认为这里的问题是您需要指定主连接和辅助连接。您可以通过以下方式交换tags = db.relationship('Tag', secondary=event_tag, backref=db.backref('events', lazy='dynamic'))

tags = db.relationship(
    'Tag',
    secondary=event_tag,
    primaryjoin="event_tag.c.event_id == Event.id",
    secondaryjoin="event_tag.c.tag_id == Tag.id",
    backref=db.backref('events', lazy='dynamic'),
    lazy="dynamic"
)

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多