Обновление таблицы базы данных с помощью Flask/Sqlite

#python #sqlite #flask

Вопрос:

Я пытаюсь заставить это работать, и сообщение об ошибке ‘строка 49, в курсоре pushNumber.выполнить(строка запроса, последний номер) sqlite3.OperationalError: значение строки, использованное не по назначению, продолжает появляться. Кроме того, при использовании функции pop появляется следующее: ‘sqlite3.OperationalError: стек таблиц содержит 1 столбец, но было предоставлено 3 значения’

Я пытаюсь сделать так, чтобы при посещении веб-страницы /calc/push/50 она добавляла 50 в список, а затем создавала таблицу в базе данных стека. Когда я ввожу /calc/push/8, он добавляет 8 в список и вставляет это в базу данных. В одном столбце должен просто отображаться полный список, обновляемый каждый раз с помощью push, а в другом столбце должны отображаться все журналы любой функции, которую я использовал, с новой записью, вставляемой каждый раз под последней.

 from flask import Flask, render_template
import sqlite3

from flask.wrappers import Request

app = Flask(__name__)
conn = sqlite3.connect('stack.db')
cursor = conn.cursor()

stackList = []
latestNumber = 0    #For pop/peek function
columnCreated = 0

#cursor.execute("""CREATE TABLE Stack (
#                 StackLogs text
#                 Stacklist text
#              )""")
#conn.commit()

@app.route('/')
@app.route('/calc/')
@app.route('/calc/peek')
def calcPeek():
    return render_template('peek.html', latestNumber=latestNumber) #Prints top of stack - recent number. Could also use [-1]

@app.route('/calc/push/<number>') #<> passes number as a variable
def pushNumber(number):
    stackList.append(number)
    global latestNumber
    latestNumber = number #Assigns most recent number to this variable
    print(stackList)    #Prints to console so we can check the list
    global columnCreated
    columnCreated  = 1
    print(columnCreated)

    if columnCreated == 1:
         conn = sqlite3.connect('stack.db')
         cursor = conn.cursor()
         stack_string = ', '.join('?' * len(stackList))
         query_string = 'INSERT INTO Stack VALUES (%s);' % stack_string
         cursor.execute(query_string, stackList)
         conn.commit()
         conn.close()
    elif columnCreated >= 2:
         conn = sqlite3.connect('stack.db')
         cursor = conn.cursor()
         stack_string = ', '.join('?' * len(latestNumber))
         query_string = 'UPDATE Stack SET StackLogs=(%s);' % stack_string
         cursor.execute(query_string, latestNumber)
         conn.commit()
         conn.close()

    return render_template('push.html', number=number, latestNumber=latestNumber)

@app.route('/calc/pop')
def calcPop():
    global latestNumber
    if stackList == []: #If empty, prints to console. Otherwise pops end off of list.
        print("Stack is empty")
    else: 
        stackList.pop()     #Removes last value by default

    conn = sqlite3.connect('stack.db')
    cursor = conn.cursor()
    stack_string = ', '.join('?' * len(stackList))
    query_string = 'INSERT INTO Stack VALUES (%s);' % stack_string
    cursor.execute(query_string, stackList)
    conn.commit()
    conn.close()

    return render_template('pop.html', stackList=stackList, latestNumber=latestNumber)
 

Ответ №1:

Попробуйте удалить круглые скобки в вашем запросе :

 UPDATE Stack SET StackLogs=%s;
INSERT INTO Stack VALUES %s;