原文链接:【KWDB 创作者计划】_Python 与 KWDB 打造线上图书管理系统:全流程指南及实战-CSDN博客
作者:大师兄6668
在数字化时代,构建高效的线上管理系统是提升工作与生活效率的关键。
在前三篇博文中,我们已经成功在 Centos 云服务中通过 Docker 安装了 KWDB,
在 CentOS 云服务中通过 Docker 安装 KWDB数据库
并且掌握了在云服务器上直接连接 KWDB 进行增删改查的操作方法。
【云服务器连接已部署 KWDB 并进行增删改查操作】完整指南
而且深入探索如何通过 Python 语言连接 KWDB,
【通过 Python 连接 KWDB 数据库】的完整步骤与示例
接下来,我们利用这些知识,再做一个简单的项目——《线上图书管理系统》demo,
本文将带领大家使用Python和KWDB打造一个功能完备的线上图书管理系统,从项目规划、环境搭建到功能实现与优化,逐步深入,让你轻松掌握开发技巧。
本系统旨在实现图书的信息化管理,涵盖图书的查询、添加、借阅和归还等核心功能。借助Python强大的编程能力和KWDB卓越的数据处理性能,为用户提供便捷的图书管理服务。
从Python官方网站下载并安装Python。安装过程中,记得勾选“Add Python to PATH”,以便在命令行中直接使用Python。
若尚未安装KWDB,可通过Docker进行快速部署。以Centos云服务为例,先确认已安装Docker,然后拉取KWDB镜像:docker pull kwdb/kwdb:latest。接着创建docker-compose.yml文件,配置如下:
version: '3.3' services: kaiwudb-container: image: "kwdb/kwdb:latest" container_name: kaiwudb-experience hostname: kaiwudb-experience ports: - 8080:8080 - 26257:26257 ulimits: memlock: -1 volumes: - /dev:/dev networks: - default restart: on-failure ipc: shareable privileged: true environment: - LD_LIBRARY_PATH=/kaiwudb/lib tty: true working_dir: /kaiwudb/bin command: - /bin/bash - -c - | /kaiwudb/bin/kwbase start-single-node --insecure --listen-addr=0.0.0.0:26257 --advertise-addr=127.0.0.1:26257 --http-addr=0.0.0.0:8080 --store=/kaiwudb/deploy/kaiwudb
保存文件后,在所在目录执行docker-compose up -d启动KWDB服务。
项目中使用psycopg库连接KWDB,通过pip安装:pip install "psycopg[binary]"。若采用Flask框架构建Web应用,还需安装Flask:pip install flask。
使用kwbase CLI工具连接KWDB,
创建名为library_db的数据库:
CREATE DATABASE library_db;

在数据库内创建books表存储图书信息:
CREATE TABLE library_db.books ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, author VARCHAR(255) NOT NULL, comment TEXT, state INT DEFAULT 0 );

id字段使用SERIAL类型实现自增,state字段用于标记图书借阅状态,0代表未借出,1代表已借出。
利用Flask框架开发服务端接口,实现图书管理功能。创建app.py文件,编写代码:
from flask import Flask, render_template, request
import psycopg
app = Flask(__name__)
# 连接KWDB数据库
def connect_kwdb():
url = "postgresql://test:KWdb%212022@127.0.0.1:26257/library_db"
try:
conn = psycopg.connect(url)
return conn
except psycopg.Error as e:
print(f"连接KWDB失败: {e}")
return None
# 首页路由
@app.route("/")
def index():
return render_template("index.html")
# 展示书籍路由
@app.route("/show_books")
def show_books():
conn = connect_kwdb()
if not conn:
return "数据库连接失败", 500
cursor = conn.cursor()
try:
cursor.execute("select * FROM library_db.books")
books = cursor.fetchall()
return render_template("show_books.html", books=books)
except psycopg.Error as e:
return f"查询书籍失败: {e}", 500
finally:
cursor.close()
conn.close()
# 添加书籍路由
@app.route("/add_book", methods=["GET", "POST"])
def add_book():
if request.method == "POST":
name = request.form["name"]
author = request.form["author"]
comment = request.form["comment"]
conn = connect_kwdb()
if not conn:
return "数据库连接失败", 500
cursor = conn.cursor()
try:
cursor.execute("insert INTO library_db.books (name, author, comment) VALUES (%s, %s, %s)", (name, author, comment))
conn.commit()
return "书籍添加成功!"
except psycopg.Error as e:
return f"添加书籍失败: {e}", 500
finally:
cursor.close()
conn.close()
return render_template("add_book.html")
# 借阅书籍路由
@app.route("/lend_book", methods=["GET", "POST"])
def lend_book():
if request.method == "POST":
name = request.form["name"]
conn = connect_kwdb()
if not conn:
return "数据库连接失败", 500
cursor = conn.cursor()
try:
cursor.execute("select * FROM library_db.books WHERE name = %s", (name,))
result = cursor.fetchone()
if not result:
return "图书不存在!"
state = result[4]
if state == 1:
return "图书已被借阅!"
cursor.execute("update library_db.books SET state = 1 WHERE name = %s", (name,))
conn.commit()
return "借阅成功!借了不看会变胖噢~"
except psycopg.Error as e:
return f"借阅书籍失败: {e}", 500
finally:
cursor.close()
conn.close()
return render_template("lend_book.html")
# 归还书籍路由
@app.route("/return_book", methods=["GET", "POST"])
def return_book():
if request.method == "POST":
name = request.form["name"]
conn = connect_kwdb()
if not conn:
return "数据库连接失败", 500
cursor = conn.cursor()
try:
cursor.execute("update library_db.books SET state = 0 WHERE name = %s", (name,))
conn.commit()
return "归还成功!"
except psycopg.Error as e:
return f"归还书籍失败: {e}", 500
finally:
cursor.close()
conn.close()
return render_template("return_book.html")
if __name__ == "__main__":
app.run()在项目目录下创建templates文件夹,存放HTML模板文件。
1、index.html:系统首页,提供功能导航。
<!DOCTYPE html> <html> <head> <title>图书管理系统</title> </head> <body> <h1>图书管理系统</h1> <ul> <li><a href="/show_books">显示图书</a></li> <li><a href="/add_book">添加图书</a></li> <li><a href="/lend_book">借阅图书</a></li> <li><a href="/return_book">归还图书</a></li> </ul> </body> </html>
2、add_book.html:用于添加图书,包含图书信息输入表单。
<!DOCTYPE html> <html> <head> <title>添加图书</title> </head> <body> <h1>添加图书</h1> <form method="POST" action="/add_book"> <label for="name">书名:</label> <input type="text" id="name" name="name"><br><br> <label for="author">作者:</label> <input type="text" id="author" name="author"><br><br> <label for="comment">评论:</label> <textarea id="comment" name="comment"></textarea><br><br> <input type="submit" value="添加"> </form> </body> </html>
3、lend_book.html:实现图书借阅功能,提供借阅表单。
<!DOCTYPE html> <html> <head> <title>借阅图书</title> </head> <body> <h1>借阅图书</h1> <form method="POST" action="/lend_book"> <label for="name">书名:</label> <input type="text" id="name" name="name"><br><br> <input type="submit" value="借阅"> </form> </body> </html>
4、return_book.html:用于图书归还,有归还表单。
<!DOCTYPE html> <html> <head> <title>归还图书</title> </head> <body> <h1>归还图书</h1> <form method="POST" action="/return_book"> <label for="name">书名:</label> <input type="text" id="name" name="name"><br><br> <input type="submit" value="归还"> </form> </body> </html>
5、show_books.html:展示图书列表,呈现图书详细信息和借阅状态。
<!DOCTYPE html>
<html>
<head>
<title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<table>
<tr>
<th>ID</th>
<th>书名</th>
<th>作者</th>
<th>评论</th>
<th>状态</th>
</tr>
{% for book in books %}
<tr>
<td>{{ book[0] }}</td>
<td>{{ book[1] }}</td>
<td>{{ book[2] }}</td>
<td>{{ book[3] }}</td>
<td>{% if book[4] == 1 %}已借出{% else %}未借出{% endif %}</td>
</tr>
{% endfor %}
</table>
</body>
</html>在项目目录下执行python app.py启动服务。访问http://127.0.0.1:5000,即可使用图书管理系统。

用户可添加图书、查询图书信息、借阅和归还图书,系统会实时更新数据库并展示相应结果。


在数据库中进行查询,可以看到,书籍已经成功添加并且写入了数据库:


可以看到,正常把数据库中已有的图书进行了展示。
咱们这里直接操作数据库增加一条数据,看页面是否可以正常进行展示。
insert INTO library_db.books (name, author, comment)
VALUES ('心是孤独的猎手', '卡森·麦卡勒斯', '我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。');运行成功后,再查询数据库中,目前有两本书。

我们刷新页面,看看是否可以正常显示。

可以看到,一切正常。
我们来借阅 《三体》


显示已经借阅成功,我们直接查看数据库,看《三体》数据借出状态是否改变。

可以看到,status已经变成了1,也就是已借出的状态。
接下来,我们进行归还


可以看到,页面显示归还成功,我们查询数据库确认一下。

果然状态已经改过来了。
至此,通过python和KWDB搭建的图书管理系统的demo就完成了,撒花~
大家可以添加更加细节的功能和界面,完善这个系统。
通过Python和KWDB的结合,我们成功构建了一个实用的线上图书管理系统。KWDB高效的数据存储和查询能力,与Python灵活的Web开发框架相得益彰。后续可进一步完善系统,如增加用户权限管理、优化界面设计、引入数据备份机制等,提升系统的实用性和安全性。希望本文能为你在数据库应用开发方面提供有益参考,激发更多创新想法。