当我们需要管理一些书籍时,我们可以利用Python和PostgreSQL来创建一些简单的操作系统,这样我们就可以轻松地管理我们的书籍库存了。

在这篇博客中,我将向您展示如何使用Python Flask框架和psycopg2库来创建一个简单的书籍库存管理系统。该系统可以实现以下操作:

显示所有书籍 添加一本书籍 删除一本书籍 借出一本书籍 还回一本书籍

首先,我们需要创建一个名为book的数据库来存储所有书籍的信息。我们可以使用以下代码在PostgreSQL中创建这个数据库:

CREATE DATABASE book;

现在,我们需要创建一个名为book的表来存储书籍的信息。表格将需要包含以下信息:书籍ID,书籍名称,书籍作者和书籍库存量。在PostgreSQL中,我们可以使用以下代码来创建这个表:

CREATE TABLE book(

bookid integer primary key,

bookname varchar(40) not null,

bookauther varchar(40) not null,

booksurplus integer not null

);

这个表格包含了书籍的ID、名称、作者和库存量。我们将使用这些信息来管理库存,并对书籍进行增加、删除、借出和还回的操作。

接下来,我们需要使用psycopg2库来连接到PostgreSQL数据库。我们需要创建一个名为connect_db()的函数,该函数将读取数据库的参数并返回一个数据库连接对象。

import psycopg2

def connect_db():

conn = psycopg2.connect(

host='localhost',

port='5432',

dbname='book',

user='postgres',

password='123456'

)

return conn

接下来,我们需要使用Flask框架来构建一个Web应用程序。我们将需要创建以下路由,以便能够与我们的数据库进行交互:

/: 显示主页 /show_all_book: 显示所有书籍 /del_book0: 显示删除书籍的页面 /del_book1: 执行删除书籍操作 /add_book0: 显示添加书籍的页面 /add_book1: 执行添加书籍操作 /out_book0: 显示借出书籍的页面 /out_book1: 执行借出书籍操作 /in_book0: 显示还回书籍的页面 /in_book1: 执行还回书籍操作 现在,让我们开始编写这些路由。首先,我们需要在app.py中导入Flask和render_template和request函数,这些函数将帮助我们构建Web应用程序。

from flask import Flask, render_template, request

app = Flask(__name__)

接下来,让我们创建主页路由。

@app.route('/')

def index():

return render_template('index.html')

首页

展示所有藏书

借出图书

还回图书

删除图书

增加图书

我们将在templates文件夹中创建一个名为index.html的模板文件,该文件将在我们访问主页时被渲染。

接下来,让我们创建一个路由来显示所有的书籍。

@app.route('/show_all_book')

def show_all_book():

conn = connect_db()

cur = conn.cursor()

cur.execute("SELECT * FROM book")

rows = cur.fetchall()

return render_template('show_all_book.html',rows=rows)

图书馆所有藏书

{% for row in rows %}

{% endfor %}

图书ID图书名称作者余量
{{ row[0] }}{{ row[1] }}{{ row[2] }}{{ row[3] }}

返回首页

该路由将连接到数据库并获取所有书籍的信息。在获取所有的书籍信息后,我们将把它们传递到一个名为show_all_book.html的模板文件中,该模板文件将渲染所有书籍的信息。

接下来,让我们创建一个路由来删除一本书籍。

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

def del_book0():

return render_template('del_book.html')

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

def del_book1():

del_bookid = request.form.get('del_bookid')

del_bookname = request.form.get('del_bookname')

sql = f"DELETE FROM book WHERE bookid={del_bookid} "

conn = connect_db()

cur = conn.cursor()

cur.execute(sql)

conn.commit()

return render_template('del_book.html', msg=f"{del_bookname}删除成功!")

删除书籍

请输入删除书籍的Id :

请输入删除书籍的名称:


{{msg}}

继续删除

返回首页

该路由将显示一个名为del_book.html的模板文件,该文件将要求用户输入要删除的书籍的信息。然后,当用户提交要删除的书籍信息时,我们将连接到数据库并执行一个名为DELETE FROM的SQL语句,从而删除该书籍。最后,我们将向用户显示一个成功或失败的消息。

接下来,让我们创建一个路由来添加一本书籍。

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

def add_book0():

return render_template('add_book.html')

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

def add_book1():

add_bookid = request.form.get('add_bookid')

add_bookname = request.form.get('add_bookname')

add_bookauther = request.form.get('add_bookauther')

add_booksurplus= request.form.get('add_booksurplus')

sql=f"INSERT INTO book VALUES ({add_bookid},'{add_bookname}','{add_bookauther}',{add_booksurplus})"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

conn.commit()

return render_template('add_book.html',msg=f"{add_bookname}添加成功!")

添加书籍

请输入增加书籍的Id :

请输入增加书籍的名称:

请输入增加书籍的作者:

请输入增加书籍的数量:


{{msg}}

继续添加书籍

返回首页

该路由将显示一个名为add_book.html的模板文件。在该文件中,用户可以输入一本书籍的信息,并提交表单以将信息添加到数据库中。当用户提交表单时,我们将连接到数据库并执行一个名为INSERT INTO的SQL语句,以将书籍添加到数据库中。最后,我们将向用户显示一个成功或失败的消息。

接下来,让我们创建一个路由来借出一本书籍。

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

def out_book0():

return render_template('out_book.html')

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

def out_book1():

out_bookid=request.form.get('out_bookid')

out_bookname = request.form.get('out_bookname')

sql=f"select book.booksurplus from book where bookid={out_bookid}"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

surplus=cur.fetchall()

conn.commit()

if surplus[0][0] >0:

sql=f"update book set booksurplus=booksurplus-1 where bookid={out_bookid}"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

conn.commit()

return render_template('out_book.html',msg=f"{out_bookname}成功借出,{out_bookname}还剩下{surplus[0][0]}本。")

else:

return render_template('out_book.html',msg=f"抱歉!{out_bookname}库存不足!")

借出书籍

请输入借出书籍的Id :

请输入借出书籍的名称 :


{{msg}}

继续借书

返回首页

该路由将显示一个名为out_book.html的模板文件,该文件将要求用户输入要借出的书籍的信息。当用户提交表单时,我们将连接到数据库并首先检查该书籍库存是否足够。如果库存充足,我们将执行一个名为update book set的SQL语句,将该书籍的库存减1,并向用户显示一个成功消息。如果库存不足,我们将向用户显示一个失败消息。

最后,让我们创建一个路由来还回一本书籍。

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

def in_book0():

return render_template('in_book.html')

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

def in_book1():

in_bookid=request.form.get('in_bookid')

in_bookname = request.form.get('in_bookname')

sql=f"update book set booksurplus=booksurplus+1 where bookid={in_bookid}"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

conn.commit()

sql = f"select book.booksurplus from book where bookid={in_bookid}"

conn = connect_db()

cur = conn.cursor()

cur.execute(sql)

surplus = cur.fetchall()

conn.commit()

return render_template('in_book.html',msg=f"{in_bookname}成功还回,{in_bookname}还剩下{surplus[0][0]}本。")

还回书籍

请输入还回书籍的Id :

请输入还回书籍的名称:


{{msg}}

继续还书

返回首页

在这篇博客中,我们学习了如何使用Python Flask和PostgreSQL实现基本的书籍库存管理系统。我们分别实现了展示所有书籍、删除书籍、添加书籍、借出书籍和归还书籍等功能的路由。

在实现这些功能之前,我们首先创建了一个名为book的数据库并设计了一个包含书籍ID、书名、作者名和库存数量的book表。然后,我们实现了一个connect_db函数来连接到这个数据库。

接下来,我们实现了展示所有书籍、删除书籍和添加书籍的路由。在这些路由中,我们使用了SQL语句并通过connect_db函数连接到了database。 在借出书籍和还回书籍的路由中,我们也使用了SQL语句,但除了执行UPDATE和SELECT语句之外,我们还使用了request.form.get函数来获取表单中用户输入的数据,并使用render_template函数来渲染包含成功消息的HTML模板。

总之,通过这篇博客,我们可以了解到使用Python Flask与数据库结合,可以很容易地创建一个简单易用的书籍库存管理系统,帮助用户快速处理图书馆等场合的库存管理问题。

目录结构:

├── app.py

├── static

│ ├── css

│ └── js

└── templates

├── add_book.html

├── del_book.html

├── index.html

├── in_book.html

├── out_book.html

└── show_all_book

完整代码:

import psycopg2

from flask import Flask, render_template, request

app = Flask(__name__)

def connect_db():

conn = psycopg2.connect(

host='localhost',

port='5432',

dbname='book',

user='postgres',

password='123456'

)

return conn

@app.route('/')

def index():

return render_template('index.html')

@app.route('/show_all_book')

def show_all_book():

conn = connect_db()

cur = conn.cursor()

cur.execute("SELECT * FROM book")

rows = cur.fetchall()

return render_template('show_all_book.html',rows=rows)

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

def del_book0():

return render_template('del_book.html')

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

def del_book1():

del_bookid = request.form.get('del_bookid')

del_bookname = request.form.get('del_bookname')

sql = f"DELETE FROM book WHERE bookid={del_bookid} "

conn = connect_db()

cur = conn.cursor()

cur.execute(sql)

conn.commit()

return render_template('del_book.html', msg=f"{del_bookname}删除成功!")

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

def add_book0():

return render_template('add_book.html')

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

def add_book1():

add_bookid = request.form.get('add_bookid')

add_bookname = request.form.get('add_bookname')

add_bookauther = request.form.get('add_bookauther')

add_booksurplus= request.form.get('add_booksurplus')

sql=f"INSERT INTO book VALUES ({add_bookid},'{add_bookname}','{add_bookauther}',{add_booksurplus})"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

conn.commit()

return render_template('add_book.html',msg=f"{add_bookname}添加成功!")

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

def out_book0():

return render_template('out_book.html')

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

def out_book1():

out_bookid=request.form.get('out_bookid')

out_bookname = request.form.get('out_bookname')

sql=f"select book.booksurplus from book where bookid={out_bookid}"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

surplus=cur.fetchall()

conn.commit()

if surplus[0][0] >0:

sql=f"update book set booksurplus=booksurplus-1 where bookid={out_bookid}"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

conn.commit()

return render_template('out_book.html',msg=f"{out_bookname}成功借出,{out_bookname}还剩下{surplus[0][0]}本。")

else:

return render_template('out_book.html',msg=f"抱歉!{out_bookname}库存不足!")

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

def in_book0():

return render_template('in_book.html')

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

def in_book1():

in_bookid=request.form.get('in_bookid')

in_bookname = request.form.get('in_bookname')

sql=f"update book set booksurplus=booksurplus+1 where bookid={in_bookid}"

conn=connect_db()

cur=conn.cursor()

cur.execute(sql)

conn.commit()

sql = f"select book.booksurplus from book where bookid={in_bookid}"

conn = connect_db()

cur = conn.cursor()

cur.execute(sql)

surplus = cur.fetchall()

conn.commit()

return render_template('in_book.html',msg=f"{in_bookname}成功还回,{in_bookname}还剩下{surplus[0][0]}本。")

if __name__ == '__main__':

app.run()

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。