原文链接:[【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; ```  在数据库内创建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:系统首页,提供功能导航。** ```
图书管理系统
- 显示图书
- 添加图书
- 借阅图书
- 归还图书
``` **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,即可使用图书管理系统。  用户可添加图书、查询图书信息、借阅和归还图书,系统会实时更新数据库并展示相应结果。 ## 添加图书   在数据库中进行查询,可以看到,书籍已经成功添加并且写入了数据库:  ## 显示图书  可以看到,正常把数据库中已有的图书进行了展示。 咱们这里直接操作数据库增加一条数据,看页面是否可以正常进行展示。 ``` insert INTO library_db.books (name, author, comment) VALUES ('心是孤独的猎手', '卡森·麦卡勒斯', '我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。'); ``` 运行成功后,再查询数据库中,目前有两本书。  我们刷新页面,看看是否可以正常显示。  可以看到,一切正常。 ## 借阅图书 我们来借阅 《三体》   显示已经借阅成功,我们直接查看数据库,看《三体》数据借出状态是否改变。  可以看到,status已经变成了1,也就是已借出的状态。 接下来,我们进行归还 ## 归还图书   可以看到,页面显示归还成功,我们查询数据库确认一下。  果然状态已经改过来了。 至此,通过python和KWDB搭建的图书管理系统的demo就完成了,撒花~ 大家可以添加更加细节的功能和界面,完善这个系统。 # 五、总结与展望 通过Python和KWDB的结合,我们成功构建了一个实用的线上图书管理系统。KWDB高效的数据存储和查询能力,与Python灵活的Web开发框架相得益彰。后续可进一步完善系统,如增加用户权限管理、优化界面设计、引入数据备份机制等,提升系统的实用性和安全性。希望本文能为你在数据库应用开发方面提供有益参考,激发更多创新想法。

评论(0)