我的应用程序结合使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2。
在当前版本中,我有一个设置表。该表将只有一个记录和一个字段。最初,该表包含零个记录。
我要实现的是:
这是我的代码:
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文档。