FLASK: новые значения, введенные в форму, не вставляются в базу данных, даже если выполнение было зафиксировано - PullRequest
0 голосов
/ 23 января 2020
from flask import Flask, jsonify, request, url_for, redirect, session, render_template, g
import sqlite3

app = Flask(__name__)
app.config['DATABASE'] = './data.db'

def connect_db():
    path = r"C:\Users\Arjun\Documents\flask_app\data.db"
    sql = sqlite3.connect(path)
    sql.row_factory = sqlite3.Row
    return sql

def get_db():
    if not hasattr(g, 'sqlite3'):
        g.sqlite_db = connect_db()
    return g.sqlite_db

@app.teardown_appcontext
def close_db(error):
    if hasattr(g, 'sqlite_db'):
        g.sqlite_db.close()

@app.route('/home', defaults={'name':'Default'})
@app.route('/home/<name>')
def home(name):
    session['name'] = name
    return render_template('home.html', name=name, display = False, mylist = [1,2,3,4]

@app.route('/theform5', methods=['GET', 'POST'])
def theform5():
    if request.method == 'GET':
        return render_template('form.html')
    else:
        name = request.form['name']
        location = request.form['location']

        db = get_db()
        db.execute("insert into users (name, location) values (?, ?)", [name, location])
        db.commit()

        return redirect(url_for('home', name=name, location=location))

@app.route('/viewresults')
def viewresults():
    db = get_db()
    cur = db.execute('select id, name, location from users')
    results = cur.fetchall()
    return 'The ID is {}. Name is {}. The location is {}. '.format(results[1]['id'], results[1] 
            ['name'], results[1]['location'])

Ошибка в:

return "Идентификатор - {}. Имя - {}. Расположение - {}". Формат (результаты [1] ['id'], результаты [1] ['имя'], результаты [1] ['местоположение'])

IndexError: индекс списка вне диапазона

Хотя таблицу можно редактировать напрямую через терминал, его нельзя редактировать при запуске веб-приложения flask.

  • Браузер: Chrome
  • SQLite: v3.30.1
  • Python: v3.8.1
  • Flask: v1.1.1

Ответы [ 3 ]

0 голосов
/ 25 января 2020

Чтобы запустить db.execute, вам нужно сначала установить курсор:

db = get_db ()

cursor = db.cursor ()

cursor.execute («вставить в значения пользователей (имя, местоположение) (?,?)», [имя, местоположение])

также, возможно, ваш синтаксис отключен, попробуйте это:

cursor.execute ("вставить в пользовательские значения ('% s', '% s')"% (имя, местоположение))

0 голосов
/ 26 января 2020
0 голосов
/ 25 января 2020

у вас есть синтаксическая ошибка в вашем операторе возврата в вашей домашней функции. отсутствует ")" в конце.

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