首页 > 解决方案 > flask 和 sqlite 更新可能为空的值

问题描述

我需要根据从表单收到的发布请求更新数据库中一行的值。

HTML 表单将通过 post 请求发送更新行所需的部分或全部值。我认为我应该使用UPDATE查询来更新行中的值,但是这些值可能是空的,这会引发语法错误。

HTML是:

<form action="/change-profile-information" method="POST">
  <label>email</label>
  <input type="email" name="email" value={{result[0]}}>
  <label>name contact person</label>
  <input type="text" name="contact_person" value={{result[1]}}>
  <label>phone</label>
  <input type="tel" name="phone" value={{result[2]}}>
  <label>address</label>
  <input type="text" name="address" value={{result[3]}}>
  <label>profile image</label>
  <input type="file" name="image">
  <button type="submit">SUBMIT</button>
</form>

在我的 Flask 函数中用于发布请求时,我正在执行 SQLite 查询以更新值。

@app.route('/change-profile-information', methods=['POST'])
def change_profile_information():
    if 'username' in session:
        user_id = session['user_id']

        email = request.form.get('email')
        first_name = request.form.get('first_name')
        last_name = request.form.get('last_name')
        phone = request.form.get('phone')
        address = request.form.get('address')
        image = request.form.get('image')
        # change in DB
        con = lite.connect('base.db') 
        cur = con.cursor()
        try:
            cur.execute(f"""UPDATE farmers 
                            SET email='{email}', name='{first_name}'
                            lastname='{last_name}',
                            phone='{phone}', address='{address}',
                            profile_image='{image}' 
                            WHERE farmer_id='{user_id}';""")
            # reload page
            return redirect('/settings-farmer.html', code=302)                
        except lite.Error as error:
            return "Failed: "+str(error)
        finally:
            if (con):
                con.close()

在最后一段代码中, 的值first_name = request.form.get('first_name')可能为空,这给了我一个问题。事实上,如果我发送带有last_name它的参数的请求将通过一个错误说Failed: near "lastname": syntax error。似乎如果参数为空,我仍然有空字符串,但这仍然会引发 SQLite 的语法错误。

我应该使用?andVALUES('{last_name}')还是应该使用REPLACE而不是UPDATE

标签: pythondatabasesqliteflasksql-update

解决方案


推荐阅读