Flask-SQLAlchemy: Bedingtes Einfügen oder Aktualisieren einer Zeile
Meine Anwendung verwendet eine Kombination aus Flask, Flask-SQLAlchemy, Flask-WTF und Jinja2.
In seiner aktuellen Inkarnation habe ich eine Einstellungstabelle. Die Tabelle enthält nur einen Datensatz mit einem Feld. Zu Beginn enthält die Tabelle keine Datensätze.
Was ich erreichen möchte, ist:
Wenn in db keine Einträge vorhanden sind, zeigen Sie ein leeres Formular an, das für Benutzereingaben bereit istWenn ein Eintrag vorhanden ist, zeigen Sie den Eintrag an, undWenn der Benutzer den Wert ändert, aktualisieren Sie die Aufzeichnung in db.Hier ist mein Code:
models.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
forms.py
class SettingsForm(Form):
rssfeed = TextField('rssfed', validators= [Required()])
views.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)
In der jetzigen Form erstellt dieser Code einen Datensatz, wenn er nicht existiert, sondern denrssfeed
Spalte ist leer.
Wie kann ich diesen Code ändern, damit es wirdINSERT
wenn der Datensatz nicht existiert undUPDATE
wenn doch?