使用Flask在sqlite3数据库中添加数据时出现错误

时间:2019-01-13 13:58:42

标签: python sqlite

我正在尝试在现有数据库中添加数据,但输出错误,有一个小错误,请帮帮我。谢谢

代码::

@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>

输出应为:“记录添加成功”,但出现“插入操作错误”。

3 个答案:

答案 0 :(得分:1)

我的猜测是您的代码中有错字:

"cors"

应该是

addr = request.form['add']

但是您的代码需要一些有关连接的修补程序:

addr = request.form['addr'] 块的正常退出时调用

con.commit(),如果由于异常而退出with块,则调用con.rollback()(请参阅{{3 }})。您不需要这两个显式调用。

此外,您将with放在了con.close()语句之后,这意味着它将永远不会执行。只需换行,或者考虑在程序开始时打开连接。

答案 1 :(得分:0)

except:之后,放置一个raise以重新引发最后一个异常,并将追溯信息发布到此处。

可能的问题是:

  • 您对database.db文件没有权限
  • 您没有发送任何一个表单密钥,并且访问request.form["some key"]会引发KeyError异常。

答案 2 :(得分:0)

为此挣扎了好几个小时。首先,您需要创建一个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>