ошибка отправки данных в базу данных sqlite3 с помощью python / flask - PullRequest
0 голосов
/ 23 февраля 2020

Я делаю небольшой сайт регистрации для регистрации гостей. Я использую базу данных sqlite3.

Когда я запускаю свой код, я получаю сообщение об ошибке «sqlite3.OperationalError: нет такой таблицы: гости». Но странно то, что в базе данных есть таблица с именем гостей, когда я ее ищу в терминале, см. скриншот.

enter image description here

Имя базы данных: "gast.db" Может кто-то увидеть, что я делаю неправильно?

вот мой код Python / flask:

from flask import Flask, render_template, request
import sqlite3
from sqlite3 import Error

app = Flask(__name__)


# Here I create a DB and a connection
def create_connection(db_file):
    conn = None
    try:
        conn = sqlite3.connect(db_file)
        print(sqlite3.version)

    except Error as e:
        print(e)
    return conn


# here I insert the created tab;es
def create_table():
    database = r"gast.db"

    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)


def create_guest(conn, guests):
    sql = ''' INSERT INTO guests(voor_naam,achter_naam,bedrijfs_naam,datum)
              VALUES(?,?,?,?) '''

    cur = conn.cursor()
    cur.execute(sql, guests)
    return cur.lastrowid


# index for the html page
@app.route('/')
def index():
    return render_template("index.html")


# sending input form form to db
@app.route('/my_form', methods=['POST'])
def my_form():
    database = r"gast.db"

    if request.method == 'POST':
        conn = create_connection(database)
        with conn:

            guest_vnaam = request.form.get('Voornaam')
            guest_anaam = request.form.get('Achternaam')
            guest_cnaam = request.form.get('Bedrijfsnaam')
            guest_datum = request.form.get('Datum')

            if conn is not None:
                guest = (guest_vnaam, guest_anaam, guest_cnaam, guest_datum)
                create_guest(conn, guest)
                return render_template("index.html")

            else:
                return 'oops, er is iets verkeerd gegaan...'


# This is where I run the app 
if __name__ == '__main__':
    app.run(debug=True)

Ошибка говорит о том, что что-то идет не так при вызове функции / метода create_guest. Если бы кто-то мог мне помочь, это было бы здорово!

Заранее спасибо

1 Ответ

0 голосов
/ 23 февраля 2020

У меня была похожая ошибка с этим некоторое время назад. Я не уверен на 100%, что это правильно для вас, однако ошибка в том, что SQLite3 является однопоточным, а flask - многопоточным. Поэтому, когда поток flask запрашивает данные из SQLite3, а другие потоки делают то же самое, вы получаете странные ошибки. Чтобы исправить это, нужно заменить на многопоточность, например, MongoDB или sqlalchemy, для которой есть расширение flask для flask sqlalchemy

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...