我试图创建一个网站,过滤器使用4个不同的SQL表(字典是附加)数据郊区
但是,这个错误信息不断弹出;
sqlite3.ProgrammingError:提供的绑定数不正确。当前语句使用0,但提供了1。)
我该怎么补救呢?
Python代码:
from flask import Flask, render_template, request
import sqlite3
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html')
@app.route('/result', methods=['POST'])
def result():
parks = request.form.get('parks')
wifi = request.form.get('wifi')
libraries = request.form.get('libraries')
schools = request.form.get('schools')
conn = sqlite3.connect('suburb.db')
c = conn.cursor()
c.execute("SELECT suburb FROM park WHERE EXISTS (SELECT suburb FROM library WHERE library.suburb =park.SUBURB ) =?", (parks,))
park_subs = [row[0] for row in c.fetchall()]
c.execute("SELECT suburb FROM wifi WHERE EXISTS (SELECT suburb FROM library WHERE library.suburb =wifi.suburb)", (wifi,))
wifi_subs = [row[0] for row in c.fetchall()]
c.execute("SELECT suburb FROM library", (libraries,))
library_subs = [row[0] for row in c.fetchall()]
c.execute("SELECT suburb FROM school WHERE EXISTS (SELECT suburb FROM library WHERE library.suburb =school.suburb)?", (schools,))
school_subs = [row[0] for row in c.fetchall()]
conn.close()
result_subs = set(park_subs) & set(wifi_subs) & set(library_subs) & set(school_subs)
return render_template('result.html', subs=result_subs)
if __name__ == '__main__':
app.run
超文本:
<!DOCTYPE html>
<html>
<head>
<title>Real Estate Filtering Website</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Real Estate Filtering Website</h1>
<form method="POST" action="{{ url_for('result') }}">
<h2>Filter by:</h2>
<div class="filter">
<input type="checkbox" name="parks" id="parks" value="yes">
<label for="parks">Parks</label>
</div>
<div class="filter">
<input type="checkbox" name="wifi" id="wifi" value="yes">
<label for="wifi">Wifi Hotspots</label>
</div>
<div class="filter">
<input type="checkbox" name="libraries" id="libraries" value="yes">
<label for="libraries">Libraries</label>
</div>
<div class="filter">
<input type="checkbox" name="schools" id="schools" value="yes">
<label for="schools">Schools</label>
</div>
<input type="submit" value="Filter">
</form>
<div style="overflow-x:auto;">
<table>
<tr>
<th>Suburb ID</th>
<th>Suburb</th>
<th>
{% for record in records %} <!-- record is the list created from the python code. The for loop iterates through each record (row) -->
<tr>
{% for value in record %} <!-- loop iterates through each value in the record list and generates a table cell for each peice of data -->
<td>{{ value }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
</body>
</html>
我试过完全重新编程,但在制作替代系统时遇到了困难
2条答案
按热度按时间im9ewurl1#
在这条线上
您正在传递值
(wifi,)
,但查询文本中没有占位符(?
)。错误消息警告您不匹配。要修复此错误,请删除该值:uqcuzwp82#
上面代码中的错误是SQL查询的参数没有正确传递。不应该将参数作为execute()方法的第二个参数传递,而应该将它们作为第一个参数传递,将查询作为第二个参数传递。
例如,第一个查询应从:
c.execute("SELECT suburb FROM park WHERE EXISTS (SELECT suburb FROM library WHERE library.suburb =park.SUBURB ) =?", (parks,))
收件人:
c.execute(query="SELECT suburb FROM park WHERE EXISTS (SELECT suburb FROM library WHERE library.suburb =park.SUBURB ) =?", params=(parks,))