当前位置: 首页 > 面试题库 >

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

司空瑾瑜
2023-03-14
问题内容

我的应用程序结合使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2。

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

我要实现的是:

  • 鉴于db中不存在任何条目,因此请显示空表单以供用户输入
  • 假设存在一个条目,请显示该条目,然后
  • 如果用户更改值,则更新db中的rec。

这是我的代码:

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

表格

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会话负责其余的工作。我认为你正在使用的合并功能现在已在SQLAlchemy中弃用。



 类似资料:
  • ORM 框架 Web 开发中,一个重要的组成部分便是数据库了。Web 程序中最常用的莫过于关系型数据库了,也称 SQL 数据库。另外,文档数据库(如 mongodb)、键值对数据库(如 redis)近几年也逐渐在 web 开发中流行起来,我们习惯把这两种数据库称为 NoSQL 数据库。 大多数的关系型数据库引擎(比如 MySQL、Postgres 和 SQLite)都有对应的 Python 包。在

  • 问题内容: 乍看之下,这个问题似乎很容易,但我只是没有找到合理的解决方案。 考虑具有以下特征的表: 每天,都会生成N个新行,用于表示将来的日期,并且“名称”来自有限列表。我想在有新数据时插入新行,但是如果已经有一个包含“名称”和“日期”的行,只需对其进行更新。 请注意,目前提出的检查条件的SPROC解决方案是不可行的,因为这是从另一种语言推送的数据。 问题答案: 那是为了什么 手册页面在这里。 诀

  • 问题内容: 假设表有三列:,和。 当用户尝试登录时,将使用查询之类的内容检查条目 如果密码匹配,他将继续。我想做的是计算用户登录的次数。因此,只要他成功登录,我就希望增加该字段并将其存储回用户表。我不确定如何使用SqlAlchemy运行更新查询。 问题答案:

  • 问题内容: 我是flask和sqlalchemy的新手,我只是开始在flask应用程序上工作,现在我正在使用sqlalchemy。我想知道使用flask-sqlalchemy与sqlalchemy是否可以获得任何显着的好处。 问题答案: 主要功能是与Flask应用程序正确集成-它创建并配置引擎,连接和会话,并将其配置为与Flask应用程序一起使用。 此设置非常复杂,因为我们需要创建作用域会话并根据

  • 问题内容: 我正在尝试使用SQLAlchemy模块(而不是SQL!)在python中编写大量upsert。 我在SQLAlchemy添加上遇到以下错误: 我有一个称为列的主键的表。 在此示例中,我已经在数据库中使用了一行。当我尝试将新对象设置为时,出现上述错误。我的印象是,如果主键已经存在,记录将得到更新。 我如何仅基于主键就可以对Flask-SQLAlchemy进行增补? 有没有简单的解决方案?

  • 问题内容: 如何更新行的信息? 例如,我想更改ID为5的行的名称列。 问题答案: 使用Flask-SQLAlchemy文档中显示的教程来检索对象。拥有要更改的实体后,请更改实体本身。然后,。 例如: Flask- SQLAlchemy基于SQLAlchemy,因此请务必同时查看SQLAlchemy文档。