簡體   English   中英

使用 Flask 在 sqlite3 數據庫中添加數據時出錯

[英]Getting Error while adding data in sqlite3 database using Flask

我試圖在現有數據庫中添加數據但得到錯誤輸出,有一個小錯誤請幫助我。謝謝

代碼 ::

@app.route('/')
def new_student():
    return render_template('student.html')

@app.route('/addrec', methods=['POST', 'GET'])

def addrec():
    if request.method == 'POST':
        try:
            nm = request.form['nm']
            addr = request.form['add']
            city = request.form['city']
            pin = request.form['pin']

            with sql.connect("database.db") as con:
                cur = con.cursor()
                cur.execute('''INSERT INTO students (name,addr,city,pin)
                    VALUES(?, ?, ?, ?)''',(nm,addr,city,pin))

                con.commit()
                msg = "Record successfully added"
        except:

            con.rollback()
            msg = "error in insert operation"

        finally:
            return render_template("result.html", msg=msg)
            con.close()

if __name__ == '__main__':
    app.run(debug=True)

我的 result.html 文件是:

<!doctype html>
<html>
   <body>
      result of addition : {{ msg }}
      <h2><a href = "\">go back to home page</a></h2>
   </body>
</html>

輸出應該是::“記錄已成功添加”,但我收到“插入操作中的錯誤”。

我的猜測是你的代碼中有一個錯字:

addr = request.form['add']

應該

addr = request.form['addr']

但是您的代碼需要一些關於連接的修復:

con.commit()with塊的正常退出時被調用,並且con.rollback()with塊由於異常退出時被調用(參見文檔)。 您不需要這兩個顯式調用。

此外,您將con.close()放在return語句之后,這意味着它將永遠不會被執行。 只需交換線路,或考慮在程序開始時打開連接。

except: ,提出一個raise以重新引發最后一個異常並在此處發布回溯。

可能的問題是:

  • 您對 database.db 文件沒有權限
  • 您沒有發送表單鍵之一,並且訪問request.form["some key"]會引發 KeyError 異常。

為此掙扎了好幾個小時。 首先,您需要創建一個python文件並運行它來創建一個數據庫。 之后運行主python文件。 它對我有用。 無需將“add”更改為“addr”,因為在student.html中,名稱被指定為“add” 還要創建一個home.html文件

<!DOCTYPE HTML>  
<HTML>  
<head>  
     <title>home</title>  
</head>  
<body>  
   <h2>Hi, welcome to the website</h2>  
   <a href="/enternew">Add New Record</a><br><be>  
   <a href ="/list">Show List</a><br><be>  
</body>  
</html>  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM