【发布时间】:2020-04-12 00:58:12
【问题描述】:
我想创建一个程序来注册办公室的客人。 我遇到的问题是将注册表单中的输入发送到数据库。
运行程序时出现以下错误:
Traceback (most recent call last):
File "/home/ronny/Desktop/registratieinc/app.py", line 59, in <module>
main()
File "/home/ronny/Desktop/registratieinc/app.py", line 52, in main
create_table(conn, sql_create_guests_table)
File "/home/ronny/Desktop/registratieinc/app.py", line 32, in create_table
c.execute(sql,guests)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 402 supplied.
我的 Python 代码:
from flask import Flask, render_template, url_for, request, redirect
from datetime import datetime
import sqlite3
from sqlite3 import Error
app = Flask(__name__)
# hier maak ik de db aan en een connectie
def create_connection(db_file):
connection = None;
try:
conn = sqlite3.connect(db_file)
print(sqlite3.version)
except Error as e:
print(e)
return conn
# hier roep ik de functie voor de db aan en maak ik een db file "gast.db"
if __name__ == '__main__':
create_connection("gast.db")
# hier maak ik de table aan voor de db (moet ik nog aanpassen voor sqlite3)
def create_table(conn, guests):
sql = """ INSERT INTO guests(voor_naam,achter_naam,bedrijfs_naam,datum)
VALUES(?,?,?,?) """
c = conn.cursor()
c.execute(sql,guests)
return cur.lastrowid
def main():
database = r"gast.db"
sql_create_guests_table = """ CREATE TABLE IF NOT EXISTS guests (
id integer PRIMARY KEY,
voor_naam text NOT NULL,
achter_naam text NOT NULL,
bedrijfs_naam text NOT NULL,
datum date NOT NULL
); """
conn = create_connection(database)
if conn is not None:
# maak gast table
create_table(conn, sql_create_guests_table)
else:
print("Error! cannot create the database connection.")
if __name__ == '__main__':
main()
# hier zorg ik ervoor dat
@app.route('/')
def index():
return render_template("index.html")
# hier zorg ik ervoor dat de input uit het formulier naar de db gaat
@app.route('/my_form', methods=['POST'])
def my_form():
if request.method == 'POST':
c = conn.cursor()
guest_vnaam = request.form.get('Voornaam')
guest_anaam = request.form.get('Achternaam')
guest_cnaam = request.form.get('Bedrijfsnaam')
guest_datum = request.form.get('Datum')
try:
sql = ("INSERT INTO databasename.tablename (columnName,columnName,columnName,columnName Ci) VALUES (%s, %s, %s, %s)")
c.execute(sql,(guest_vnaam, guest_anaam, guest_cnaam, guest_datum))
conn.commit()
#or "conn.commit()" (one of the two)
return redirect('/')
except:
return 'Er ging iets fout met het opslaan van uw gegevens'
# hier run ik de app
if __name__ == '__main__':
app.run(debug=True)
还有我的 HTML 代码:
{% block body %}
<form action="{{ url_for('my_form') }}" method="POST">
<div class="container">
<h1>Gasten registratie</h1>
<p>Vul dit formulier in om te registreren</p>
<hr>
<label for="First-Name"><b>Voornaam</b></label>
<input type="text" id="First-Name" placeholder="Vul hier uw voornaam in" name="Voornaam" required>
<label for="Last-Name"><b>Achternaam</b></label>
<input type="text" id="Last-Name" placeholder="Vul hier uw achternaam in" name="Achternaam" required>
<label for="Company-name"><b>Bedrijfsnaam</b></label>
<input type="text" id="Company-name" placeholder="Vul hier uw bedrijfsnaam in" name="Bedrijfsnaam" required>
<label for="Date"><b>Datum</b></label>
<input type="date" id="Date" placeholder="Selecteer de Datum" name="Datum" required />
<hr>
<p>In het kader van onze ISAE certificering registreren wij uw gegevens.</p>
<p>Wij verwerken uw gegevens volgends de regels van het AVG.</p>
<button type="submit" class="registerbtn">Registreren</button>
</div>
</form>
{% endblock %}
如果有人可以帮助我,那就太好了。
提前致谢。
亲切的问候, 罗尼
【问题讨论】:
-
为什么有两个
if __name__ == '__main__':? -
等等,不,三个。无法遵循此代码,并且您没有显示实际的回溯
-
每个文件只能有一个
if __name__ == '__main__':。请将您的代码拆分为单独的文件或删除额外的主要结构。
标签: python python-3.x forms sqlite flask