python - Flask-SQLAlchemy:如何有条件地插入或更新一行

标签 python flask flask-sqlalchemy wtforms flask-wtforms

我的应用程序使用了 Flask、Flask-SQLAlchemy、Flask-WTF 和 Jinja2 的组合。

在其当前版本中,我有一个设置表。该表将只有一个记录和一个字段。最初,该表包含零条记录。

我想要实现的是:

  • 鉴于 db 中不存在任何条目,则显示空表单以供用户输入
  • 假设存在条目,则显示该条目,并且
  • 如果用户更改了值,则更新数据库中的记录。

这是我的代码:

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)

就目前而言,如果该代码不存在但 rssfeed 列为空,则会创建一条记录。

如何更改此代码,以便在记录不存在时 INSERT 和如果存在则 UPDATE

最佳答案

一旦您的表单经过验证等,

添加新记录:

new_provider = Provider(form.rssfeed.data)
db.session.add(new_provider)
db.session.commit()

更新现有记录:

existing_provider = Provider.query.get(1) # or whatever
# update the rssfeed column
existing_provider.rssfeed = form.rssfeed.data
db.session.commit()

更新的诀窍是您只需要更改特定字段并进行提交。 db session 负责休息。我认为您正在使用 SQLAlchemy 中现已弃用的合并功能。

关于python - Flask-SQLAlchemy:如何有条件地插入或更新一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292612/

相关文章:

python - 从两列中创建一个元组 - PySpark

python - 两个 flask 蓝图的 url_prefix 相同

python - 使用 MongoEngine 在 Flask 中测试套件

python - 如何在 Flask/SQLAlchemy 中选择_rel​​ated()?

python - 在 Flask 中动态创建和持久化模型 - Sqlalchemy

python - 在带有 SQLAlchemy Core 和 Flask 的项目中,我应该在哪里放置以及如何使用 Table() 调用?

python - 数据库异常后 SQLAlchemy 回滚中的错误?

python - 将 CSV 导入 BigQuery 中的表时无法添加字段

python - 如何在其派生类中覆盖列表的切片功能

python - Tor 不适用于 urllib2