原文链接:【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开发框架相得益彰。后续可进一步完善系统,如增加用户权限管理、优化界面设计、引入数据备份机制等,提升系统的实用性和安全性。希望本文能为你在数据库应用开发方面提供有益参考,激发更多创新想法。