KaiwuDBKaiwuDB

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战

2025-05-15

原文链接:【KWDB 创作者计划】_Python 与 KWDB 打造线上图书管理系统:全流程指南及实战-CSDN博客

作者:大师兄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)



在数据库内创建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)


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,即可使用图书管理系统。

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图3)


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


添加图书

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图4)

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图5)

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

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图6)


显示图书

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图7)

可以看到,正常把数据库中已有的图书进行了展示。

咱们这里直接操作数据库增加一条数据,看页面是否可以正常进行展示。


insert INTO library_db.books (name, author, comment)
VALUES ('心是孤独的猎手', '卡森·麦卡勒斯', '我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。');


运行成功后,再查询数据库中,目前有两本书。

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图8)

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

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图9)

可以看到,一切正常。


借阅图书

我们来借阅 《三体》

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图10)

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图11)

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

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图12)


可以看到,status已经变成了1,也就是已借出的状态。

接下来,我们进行归还


归还图书

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图13)

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图14)

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

KWDB 创作者计划 | Python 与 KWDB 打造线上图书管理系统:全流程指南及实战(图15)


果然状态已经改过来了。

至此,通过python和KWDB搭建的图书管理系统的demo就完成了,撒花~

大家可以添加更加细节的功能和界面,完善这个系统。


五、总结与展望

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



体验全新的分布式多模数据库解决方案

企业版 社区版

KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。

关注官方微信

友情链接:浪潮  

© 上海沄熹科技有限公司 Shanghai Yunxi Technology Co., Ltd.    沪ICP备2023002175号-1    网站服务协议   |   隐私政策
400-624-5688-7
服务与支持
marketing@kaiwudb.org.cn