使用python/flas从html表单向SQLite数据库发送数据

2024-10-06 15:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个注册程序,客人可以注册,他们的inf将保存在数据库中。你知道吗

我已经创建了我的表单和数据库。 唯一让我纠结的是将用户输入从表单发送到数据库。你知道吗

我的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 %}

我的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)
太好了! 提前谢谢!你知道吗

谨致问候, 罗尼


Tags: textnameformfordbcreatetablede
1条回答
网友
1楼 · 发布于 2024-10-06 15:23:41

试着做guest_vnaam = request.form.get('Voornaam')而不是guest_vnaam = request.form['Voornaam']。你知道吗

c = conn.cursor()在第一个if语句下面添加该语句。您将需要它来保存数据库中的数据。你知道吗

这段代码会保存在你的数据库里

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()

因此,您的代码如下所示:

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'

我希望这能帮助你:)

还有一个提示,节目一定要用英语而不是荷兰语:p

相关问题 更多 >