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



>我在烧瓶框架中有以下路由函数:

@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.接口错误

SQLite3.接口错误:绑定参数 5 时出错 - 可能不支持的类型。

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

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

我认为用法没有任何不同。两者都括在括号内。

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

最新更新