Flask -SQLAlchemy :Как условно вставить или обновить строку

В моем приложении используется комбинация Flask, Flask -SQLAlchemy, Flask -WTF и Jinja2.

В текущем воплощении у меня есть таблица настроек. В таблице будет только одна запись с одним полем. Изначально в таблице нет записей.

Чего я хочу добиться, так это:

  • Учитывая, что в БД нет записей, показать пустую форму, готовую для ввода пользователем
  • Учитывая, что запись существует, покажите запись и
  • если пользователь изменит значение, обновите запись в db.

Вот мой код:

model.py

class Provider(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    rssfeed = db.Column(db.String(120), unique = True)

    def __init__(self, rssfeed):
        self.rssfeed = rssfeed

    def __repr__(self):
        return '<NZBMatrix feed url %r>' % self.rssfeed

формы.py

class SettingsForm(Form):
    rssfeed = TextField('rssfed', validators= [Required()])

просмотров.py

    @app.route('/settings', methods=["GET","POST"])
    def settings():
    """ show settings """
        provider = Provider.query.get(1)
        form = SettingsForm(obj=provider)
        print provider

        if request.method == "POST" and form.validate():
            if Provider.query.get(1) is None:
                provider = Provider(rssfeed=form.rssfeed.data)
                form.populate_obj(provider)
                db.session.add(provider)
                db.session.commit()
                flash("Settings added")

        return render_template("settings.html", form=form)

В нынешнем виде этот код создает запись, если она не существует, но столбец rssfeedпуст.

Как я могу изменить этот код, чтобы он был INSERT, если запись не существует, и UPDATE, если она существует?

18
задан nsfyn55 1 June 2014 в 12:59
поделиться