📜  烧瓶SQLite

📅  最后修改于: 2021-01-02 04:35:17             🧑  作者: Mango

烧瓶SQLite

Flask可以利用Python的SQLite3模块来创建数据库Web应用程序。在本教程的这一部分中,我们将创建一个CRUD(创建-读取-更新-删除)应用程序。

由于我们已经详细介绍了Python应用程序如何与SQLite数据库进行交互,因此要修改此概念,请访问链接: Python SQLite

CRUD在烧瓶中的应用

在这里,我们将使用管理员可以交互的Flask脚本来管理SQLite数据库中的员工信息。为此,数据库employee.db包含相关的表,而表Employees包含有关雇员的信息。

首先,我们使用以下Python脚本在SQLite中创建数据库employee.DB和表employee。

EmoloyeeDB.py

import sqlite3

con = sqlite3.connect("employee.db")
print("Database opened successfully")

con.execute("create table Employees (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, address TEXT NOT NULL)")

print("Table created successfully")

con.close()

为了在烧瓶中构建一个CRUD应用程序,我们必须专注于视图函数(获取输入)和控制器(将数据保存到数据库中)。

让我们看一下与URL(/)关联的视图函数: index( )。它呈现一个模板index.html

@app.route("/")
def index():
    return render_template("index.html");

以下HTML模板(index.html)被视为我们应用程序的主页。它提供了链接,通过这些链接我们可以添加,查看和删除数据库中存储的数据。

index.html




    home


    

Hi, welcome to the website

Add Employee

List Records

Delete Record

与URL(/ add )关联的视图函数add()呈现下面给出的模板add.html 。它提供了用于输入员工信息的表格。

add.html




    Add Employee


    

Employee Information

Name
Email
Address

管理员输入的所有详细信息都会发布到与函数saveDetails()关联的URL / savedetails中。下面提供了函数saveDetails(),其中包含用于提取管理员输入的数据并将该数据保存到员工表中的代码。

它还会根据成功插入数据或发生某些错误的情况来生成消息。

@app.route("/savedetails",methods = ["POST","GET"])
def saveDetails():
    msg = "msg"
    if request.method == "POST":
        try:
            name = request.form["name"]
            email = request.form["email"]
            address = request.form["address"]
            with sqlite3.connect("employee.db") as con:
                cur = con.cursor()
                cur.execute("INSERT into Employees (name, email, address) values (?,?,?)",(name,email,address))
                con.commit()
                msg = "Employee successfully Added"
        except:
            con.rollback()
            msg = "We can not add the employee to the list"
        finally:
            return render_template("success.html",msg = msg)
            con.close()

它呈现一个模板success.html以向管理员显示消息。它还包含一个链接,以查看用户输入的记录。

success.html




    save details


    

Hi Admin, {{msg}}

View Employees

函数delete()与URL / delete关联。它呈现一个HTML模板delete.html ,该模板将表单提供给管理员,提示其输入要删除其记录的Employee_Id。它还包含指向/视图URL的链接,该链接向管理员显示所有记录。

HTML模板delete.html如下所示。

delete.html




    delete record



    

Remove Employee from the list

Employee Id

管理员输入的Employee_Id将发布到URL / deleterecord ,其中包含建立与数据库的连接的Python代码,然后删除指定Employee ID的所有记录。 URL / deleterecord与下面提供的函数deleterecord()相关联。

@app.route("/deleterecord",methods = ["POST"])
def deleterecord():
    id = request.form["id"]
    with sqlite3.connect("employee.db") as con:
        try:
            cur = con.cursor()
            cur.execute("delete from Employees where id = ?",id)
            msg = "record successfully deleted"
        except:
            msg = "can't be deleted"
        finally:
            return render_template("delete_record.html",msg = msg)

函数deleterecord()会根据情况成功删除数据还是发生某些错误,生成一条消息。它呈现一个HTML模板delete_record.html以向管理员显示消息。

delete_record.html




    delete record


{{msg}}

View List

模板delete_record.html包含指向URL /视图的链接,该链接显示了Admin的Employee记录。

它与函数view()关联,该函数建立与数据库的连接,获取所有信息,并将该信息传递给HTML模板view.html以在客户端浏览器上显示。

app.route("/view")
def view():
    con = sqlite3.connect("employee.db")
    con.row_factory = sqlite3.Row
    cur = con.cursor()
    cur.execute("select * from Employees")
    rows = cur.fetchall()
    return render_template("view.html",rows = rows) 

下面给出了显示浏览器上所有信息的HTML模板view.html。

view.html




    List



Employee Information

{% for row in rows %} {% endfor %}
ID Name Email Address
{{row["id"]}} {{row["name"]}} {{row["email"]}} {{row["address"]}}


Go back to home page

完整的Python脚本在下面给出。

克鲁德

from flask import *
import sqlite3

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html");

@app.route("/add")
def add():
    return render_template("add.html")

@app.route("/savedetails",methods = ["POST","GET"])
def saveDetails():
    msg = "msg"
    if request.method == "POST":
        try:
            name = request.form["name"]
            email = request.form["email"]
            address = request.form["address"]
            with sqlite3.connect("employee.db") as con:
                cur = con.cursor()
                cur.execute("INSERT into Employees (name, email, address) values (?,?,?)",(name,email,address))
                con.commit()
                msg = "Employee successfully Added"
        except:
            con.rollback()
            msg = "We can not add the employee to the list"
        finally:
            return render_template("success.html",msg = msg)
            con.close()

@app.route("/view")
def view():
    con = sqlite3.connect("employee.db")
    con.row_factory = sqlite3.Row
    cur = con.cursor()
    cur.execute("select * from Employees")
    rows = cur.fetchall()
    return render_template("view.html",rows = rows)


@app.route("/delete")
def delete():
    return render_template("delete.html")

@app.route("/deleterecord",methods = ["POST"])
def deleterecord():
    id = request.form["id"]
    with sqlite3.connect("employee.db") as con:
        try:
            cur = con.cursor()
            cur.execute("delete from Employees where id = ?",id)
            msg = "record successfully deleted"
        except:
            msg = "can't be deleted"
        finally:
            return render_template("delete_record.html",msg = msg)

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

在终端上使用以下命令运行Python脚本EmployeeDB.py创建数据库和Employees表。

$ python EmployeeDB.py 

现在,运行flask脚本crud.py并在浏览器上访问https:// localhost:5000。

单击链接“添加员工”以将新员工添加到数据库。

填写此表单,然后单击提交以将详细信息保存到数据库中。

现在,单击查看员工以列出数据库的所有员工。到目前为止,列表中只有一名员工,如下图所示。

单击页面底部给出的链接以返回首页。

现在,单击“删除记录”以检查脚本如何删除特定employee_id的记录。

输入要删除其记录的任何员工ID。在这里,我们必须注意,如果输入的员工ID在数据库中不存在,则会显示一条错误消息。让我们输入员工ID 1以从数据库中删除员工john。

因此,将删除ID为1的员工的记录。在这里,我们可以通过查看列表来确认这一点。单击查看列表以查看列表。