我在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时出错 - 可能是不支持的类型。
我的问题是为什么参数用法在上面的两个查询执行中有所不同?
答案 0 :(得分:2)
用法没有区别 - 在这两种情况下,您都将变量列表传递给db.execute()
。恰好,您的SELECT
语句在SQL语句中只有一个参数(即长度为1的列表),而您的UPDATE
语句有几个(更长的列表)。
答案 1 :(得分:0)
我不认为使用方法有任何不同。 两者都用括号括起来。
与POST
方法相比,GET
方法只有很多参数。