查询中参数用法的差异,使用方括号而不是

时间:2017-03-23 01:52:41

标签: python flask sqlite

我在flask框架中有以下路由功能:

@app.route('/edit/<contact_id>', methods=['GET', 'POST'])
def edit_contact(contact_id):
    db = get_db()
    if request.method == 'POST':
        db.execute('UPDATE contacts SET organization=?, contactPerson=?, phoneNumber=?, email=?, address=? WHERE  id=?',
                   [request.form['organization'], request.form['contactPerson'],
                    request.form['phoneNumber'], request.form['email'],
                    request.form['address'], contact_id])
        db.commit()
        flash('Contact successfully edited')
        return redirect(url_for('select_contact', contact_id=contact_id))
    elif request.method == 'GET':
        cur = db.execute(
            'SELECT id, organization, contactPerson, phoneNumber, email, address FROM contacts ORDER BY organization ASC ')
        contacts = cur.fetchall()

        cur = db.execute('SELECT id, organization, contactPerson, phoneNumber, email, address '
                         'FROM contacts '
                         'WHERE id=? ', [contact_id])
        selected_contact = cur.fetchall()

        disabled = ' '
        edit_cancel = 'cancel'

        return render_template('contacts_list.html', contacts=contacts, selected_contact=selected_contact[0], disabled=disabled, edit_cancel=edit_cancel)
    return redirect(url_for('contacts_list'))
`

代码正在运行,但我对代码中参数 contact_id 的使用感到困惑。

对于 POST 部分,我可以执行以下SQLite查询:

db.execute('UPDATE contacts SET organization=?, contactPerson=?, phoneNumber=?, email=?, address=? WHERE  id=?',
                   [request.form['organization'], request.form['contactPerson'],
                    request.form['phoneNumber'], request.form['email'],
                    request.form['address'], contact_id])

对于 GET 部分,我可以执行以下SQLite查询:

cur = db.execute('SELECT id, organization, contactPerson, phoneNumber, email, address '
                         'FROM contacts '
                         'WHERE id=? ', [contact_id])

首先,我使用 [contact_id] 作为 POST 条件,但当我使用方括号使用 contact_id 时,烧瓶将返回错误:

  

sqlite3.InterfaceError

     
    

sqlite3.InterfaceError:绑定参数5时出错 - 可能是不支持的类型。

  

我的问题是为什么参数用法在上面的两个查询执行中有所不同?

2 个答案:

答案 0 :(得分:2)

用法没有区别 - 在这两种情况下,您都将变量列表传递给db.execute()。恰好,您的SELECT语句在SQL语句中只有一个参数(即长度为1的列表),而您的UPDATE语句有几个(更长的列表)。

答案 1 :(得分:0)

我不认为使用方法有任何不同。 两者都用括号括起来。

POST方法相比,GET方法只有很多参数。