简体   繁体   English

使用 python/flask 将数据从 html 表单发送到 SQLite 数据库

[英]sending data from html form to SQLite database using python/flask

I am trying create a registration program where guests can register and their inf will be saved in a database.我正在尝试创建一个注册程序,客人可以在其中注册并将他们的信息保存在数据库中。

I already created my form and database.我已经创建了我的表单和数据库。 The only thing I get stuck on is sending the user input from the form to the database.我唯一遇到的问题是将用户输入从表单发送到数据库。

My HTML code:我的 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 %}

My Python code:我的 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, create_table_sql):
    try:
        c = conn.cursor()
        c.execute(create_table_sql)
    except Error as e:
        print(e)

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':
        guest_vnaam = request.form['Voornaam']
        guest_anaam = request.form['Achternaam']
        guest_cnaam = request.form['Bedrijfsnaam']
        guest_datum = request.form['Datum']

        safe_vnaam = guests(voor_naam=guest_vnaam)
        safe_anaam = guests(achter_naam=guest_anaam)
        safe_cnaam = guests(bedrijfs_naam=guest_cnaam)
        safe_datum = guests(datum=guest_datum)

        try:
            db.session.add(safe_vnaam)
            db.session.add(safe_anaam)
            db.session.add(safe_cnaam)
            db.session.add(safe_datum)
            db.session.commit()
            return redirect('/')
        except:
            return 'Er ging iets fout met het opslaan van uw gegevens'

    else:
        return render_template('index.html')

# hier run ik de app 
if __name__ == '__main__':
    app.run(debug=True)

If someone could help in the right direction, that would be great!如果有人能在正确的方向上提供帮助,那就太好了! Thank you in advance!先感谢您!

Kind regards, Ronny亲切的问候,罗尼

Try doing guest_vnaam = request.form.get('Voornaam') instead of guest_vnaam = request.form['Voornaam'] .尝试做guest_vnaam = request.form.get('Voornaam')而不是guest_vnaam = request.form['Voornaam']

c = conn.cursor() add that right under your first if statement. c = conn.cursor()在你的第一个 if 语句下添加它。 You will need that to save the data in your database.您将需要它来将数据保存在您的数据库中。

And this piece of code will save it in your database这段代码会将其保存在您的数据库中

sql = ("INSERT INTO database.table (columnName,columnName) VALUES (%s, %s, %s, %s)")
c.execute(sql,(guest_vnaam, guest_anaam, guest_cnaam,  guest_datum))
connection.commit()

So your code will look like this:所以你的代码看起来像这样:

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) VALUES (%s, %s, %s, %s)")
            c.execute(sql,(guest_vnaam, guest_anaam, guest_cnaam,  guest_datum))
            connection.commit() 
            #or "conn.commit()" (one of the two)
            return redirect('/')
        except:
            return 'Er ging iets fout met het opslaan van uw gegevens'

I hope this will help you :)我希望这能帮到您 :)

And a tip, always program in English not in Dutch :P还有一个提示,总是用英语而不是荷兰语编程:P

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM