>我在烧瓶框架中有以下路由函数:
@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
方法有很多参数。