KaiwuDB 征文

Python 与 KWDB 打造线上图书管理系统:全流程指南及实战

转载元码2026-04-13
1

原文链接:[【KWDB 创作者计划】\_Python 与 KWDB 打造线上图书管理系统:全流程指南及实战-CSDN博客](https://blog.csdn.net/qq_41308872/article/details/147183210) 作者:大师兄6668 # 用Python与KWDB构建线上图书管理系统:详细指南与实践 在数字化时代,构建高效的线上管理系统是提升工作与生活效率的关键。 在前三篇博文中,我们已经成功在 Centos 云服务中通过 Docker 安装了 KWDB, 在 CentOS 云服务中通过 Docker 安装 KWDB数据库 并且掌握了在云服务器上直接连接 KWDB 进行增删改查的操作方法。 【云服务器连接已部署 KWDB 并进行增删改查操作】完整指南 而且深入探索如何通过 Python 语言连接 KWDB, 【通过 Python 连接 KWDB 数据库】的完整步骤与示例 接下来,我们利用这些知识,再做一个简单的项目——《线上图书管理系统》demo, 本文将带领大家使用Python和KWDB打造一个功能完备的线上图书管理系统,从项目规划、环境搭建到功能实现与优化,逐步深入,让你轻松掌握开发技巧。 # 一、项目概述 本系统旨在实现图书的信息化管理,涵盖图书的查询、添加、借阅和归还等核心功能。借助Python强大的编程能力和KWDB卓越的数据处理性能,为用户提供便捷的图书管理服务。 # 二、环境搭建 ### **(一)安装Python** 从Python官方网站下载并安装Python。安装过程中,记得勾选“Add Python to PATH”,以便在命令行中直接使用Python。 ### **(二)安装KWDB** 若尚未安装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服务。 ### (三)安装相关Python库 项目中使用psycopg库连接KWDB,通过pip安装:pip install "psycopg\[binary\]"。若采用Flask框架构建Web应用,还需安装Flask:pip install flask。 # 三、项目搭建 ### (一)数据库设计 使用kwbase CLI工具连接KWDB, 创建名为library\_db的数据库: ``` CREATE DATABASE library_db; ``` ![KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图1)](https://www.kaiwudb.com/uploads/user/5/ueditor/20250515/5-250515221000325.png) 在数据库内创建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 ); ``` ![KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图2)](https://www.kaiwudb.com/uploads/user/5/ueditor/20250515/5-250515221H3D0.png) 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:系统首页,提供功能导航。** ```

图书管理系统

  • 显示图书
  • 添加图书
  • 借阅图书
  • 归还图书

``` **2、add\_book.html:用于添加图书,包含图书信息输入表单。** ```

添加图书

书名:

作者:         
        评论:

``` **3、lend\_book.html:实现图书借阅功能,提供借阅表单。** ```

借阅图书

书名:

``` **4、return\_book.html:用于图书归还,有归还表单。** ```

归还图书

书名:

``` **5、show\_books.html:展示图书列表,呈现图书详细信息和借阅状态。** ```

图书列表

{% for book in books %}                                                                                            {% endfor %}

ID 书名 作者 评论 状态
{{ book[0] }} {{ book[1] }} {{ book[2] }} {{ book[3] }} {% if book[4] == 1 %}已借出{% else %}未借出{% endif %}

``` ### 四、运行项目 在项目目录下执行python app.py启动服务。访问http://127.0.0.1:5000,即可使用图书管理系统。 ![image.png](/uploads/1/image/2026/04/20260413105209265_iufxsqr3ln4c.png "image.png") 用户可添加图书、查询图书信息、借阅和归还图书,系统会实时更新数据库并展示相应结果。 ## 添加图书 ![image.png](/uploads/1/image/2026/04/20260413105303559_savy1fskk9i7.png "image.png") ![image.png](/uploads/1/image/2026/04/20260413105433352_biwd5i09okzd.png "image.png") 在数据库中进行查询,可以看到,书籍已经成功添加并且写入了数据库: ![image.png](/uploads/1/image/2026/04/20260413105504667_j73fgejmifra.png "image.png") ## 显示图书 ![image.png](/uploads/1/image/2026/04/20260413105522551_l1e8h59e3a2k.png "image.png") 可以看到,正常把数据库中已有的图书进行了展示。 咱们这里直接操作数据库增加一条数据,看页面是否可以正常进行展示。 ``` insert INTO library_db.books (name, author, comment) VALUES ('心是孤独的猎手', '卡森·麦卡勒斯', '我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。'); ``` 运行成功后,再查询数据库中,目前有两本书。 ![image.png](/uploads/1/image/2026/04/20260413105549125_lko284jxltda.png "image.png") 我们刷新页面,看看是否可以正常显示。 ![image.png](/uploads/1/image/2026/04/20260413105608218_vn9lcv2hnmtb.png "image.png") 可以看到,一切正常。 ## 借阅图书 我们来借阅 《三体》 ![image.png](/uploads/1/image/2026/04/20260413105633861_cwfqnjs4pgb2.png "image.png") ![image.png](/uploads/1/image/2026/04/20260413105652230_hsg7bkmh8pmj.png "image.png") 显示已经借阅成功,我们直接查看数据库,看《三体》数据借出状态是否改变。 ![image.png](/uploads/1/image/2026/04/20260413105707169_m49bpbzkh4eh.png "image.png") 可以看到,status已经变成了1,也就是已借出的状态。 接下来,我们进行归还 ## 归还图书 ![KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图13)](https://www.kaiwudb.com/uploads/user/5/allimg/20250522/5-250522135R6291.jpg) ![KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图14)](https://www.kaiwudb.com/uploads/user/5/allimg/20250522/5-250522135Z1637.jpg) 可以看到,页面显示归还成功,我们查询数据库确认一下。 ![image.png](/uploads/1/image/2026/04/20260413105731329_amghj4lnf75l.png "image.png") 果然状态已经改过来了。 至此,通过python和KWDB搭建的图书管理系统的demo就完成了,撒花~ 大家可以添加更加细节的功能和界面,完善这个系统。 # 五、总结与展望 通过Python和KWDB的结合,我们成功构建了一个实用的线上图书管理系统。KWDB高效的数据存储和查询能力,与Python灵活的Web开发框架相得益彰。后续可进一步完善系统,如增加用户权限管理、优化界面设计、引入数据备份机制等,提升系统的实用性和安全性。希望本文能为你在数据库应用开发方面提供有益参考,激发更多创新想法。

-- 坚持原创,转载请注明出处 --

评论(0)

Me