基于Python与MySQL、Redis和MongoDB数据库的新闻管理系统

项目介绍

项目采用MySQL、Redis和MongoDB三种数据库与python进行数据交互实现在命令行运行的新闻管理系统,根据三种不同数据库对数据的不同特性,将数据分别保存,提高数据的持久性、安全性和高效性。 设置管理员和新闻编辑两种身份,为不同的用户设置不同的权限,实现编辑新闻、审核新闻、删除新闻、增加用户、删除用户等功能 。

项目结构

软件环境

Python运行环境:Python 3.8 编译软件:PyCharm

MySQL运行环境:MySQL8.0 视图软件:Navicat Premium 15

Redis运行环境:redis 视图软件:RedisDesktopManager

MongoDB运行环境:mongodb 视图软件:Studio 3T

项目结构

在这里插入图片描述

数据库功能简析

MySQL:关系型数据库,存放用户、用户角色、新闻、新闻类别数据库的基本信息

Redis:NOSQL型数据库,缓存新闻数据,定时删除普通新闻,不删除置顶新闻

MongoDB:介于NOSQL型数据库和关系型数据库之间的数据库,用来存放新闻的图片和文本信息

项目流程图

在这里插入图片描述

实验代码

连接数据库

mysql_db.py:

import mysql.connector.pooling

# 定义数据库的连接信息
__config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "abcdABCD1234",
    "database": "vega"
}
try:
    pool = mysql.connector.pooling.MySQLConnectionPool(
        **__config,
        pool_size=10
    )
except Exception as e:
    print(e)

redis_db.py:

import redis

try:
    pool = redis.ConnectionPool(
        host="localhost",
        port=6379,
        password="abcdABCD1234",
        db=15,
        max_connections=20
    )
except Exception as e:
    print(e)

mongo_db.py:

from pymongo import MongoClient

client = MongoClient(host="localhost", port=27017)  # 创建客户端对象
client.admin.authenticate("admin", "abcdABCD1234")  # 切换到admin逻辑库,传入参数为用户名和密码

连接MySQL数据表

user_dao.py:

from db.mysql_db import pool

class UserDao():
    # 验证用户登陆
    def login(self, username, password):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT COUNT(*) FROM t_user WHERE username=%s " \
                  "AND AES_DECRYPT(UNHEX(password), 'HelloWorld')=%s"
            cursor.execute(sql, (username, password))
            count = cursor.fetchone()[0]
            return True if count == 1 else False
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 查询用户角色
    def search_user_role(self, username):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT r.role FROM t_user u JOIN t_role r ON u.role_id=r.id " \
                  "WHERE u.username=%s"
            cursor.execute(sql, [username])
            role = cursor.fetchone()[0]
            return role
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 添加用户记录
    def insert(self, username, password, email, role_id):
        try:
            con = pool.get_connection()
            con.start_transaction()
            cursor = con.cursor()
            sql = "INSERT INTO t_user(username, password, email, role_id) " \
                  "VALUES (%s, HEX(AES_ENCRYPT(%s, 'HelloWorld')), %s, %s)"
            cursor.execute(sql, (username, password, email, role_id))
            con.commit()
        except Exception as e:
            if "con" in dir():
                con.rollback()
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 获取用户列表
    def search_user_list(self, page):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT u.id, u.username, r.role " \
                  "FROM t_user u JOIN t_role r ON u.role_id=r.id " \
                  "ORDER BY u.id " \
                  "LIMIT %s,%s"
            cursor.execute(sql, ((page - 1) * 10, 10))
            result = cursor.fetchall()
            return result
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 查询用户总页数
    def search_user_count(self):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT CEIL(COUNT(*)/10) FROM t_user"
            cursor.execute(sql)
            count_page = cursor.fetchone()[0]
            return count_page
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 更新用户信息
    def update_user(self, username, password, email, role_id, id):
        try:
            con = pool.get_connection()
            con.start_transaction()
            cursor = con.cursor()
            sql = "UPDATE t_user SET username=%s, " \
                  "password=HEX(AES_ENCRYPT(%s, 'HelloWorld')), " \
                  "email=%s, role_id=%s WHERE id=%s"
            cursor.execute(sql, (username, password, email, role_id, id))
            con.commit()
        except Exception as e:
            if "con" in dir():
                con.rollback()
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 删除指定id的新闻列表
    def delete_by_id(self, id):
        try:
            con = pool.get_connection()
            con.start_transaction()
            cursor = con.cursor()
            sql = "DELETE FROM t_user WHERE id=%s"
            cursor.execute(sql, [id])
            con.commit()
        except Exception as e:
            if "con" in dir():
                con.rollback()
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 根据用户名查询用户id
    def search_user_id(self, username):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT id FROM t_user WHERE username=%s"
            cursor.execute(sql, [username])
            user_id = cursor.fetchone()[0]
            return user_id
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

role_dao.py:

from db.mysql_db import pool

class RoleDao():
    # 查询角色列表
    def search_role_list(self):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT id, role FROM t_role"
            cursor.execute(sql)
            result = cursor.fetchall()
            return result
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

type_dao.py:

from db.mysql_db import pool

class TypeDao:
    # 查询新闻类型列表
    def search_news_category_list(self):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT id, type FROM t_type ORDER BY id"
            cursor.execute(sql)
            result = cursor.fetchall()
            return result
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

news_dao.py:

from db.mysql_db import pool

class NewsDao:
    # 获取待审批新闻页
    def search_unreview_list(self, page):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT n.id,n.title,t.type,u.username " \
                  "FROM t_news n JOIN t_type t ON n.type_id=t.id " \
                  "JOIN t_user u ON n.editor_id=u.id " \
                  "WHERE n.state=%s " \
                  "ORDER BY n.create_time DESC " \
                  "LIMIT %s,%s"
            cursor.execute(sql, ("待审批", (page - 1) * 10, 10))
            result = cursor.fetchall()
            return result
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 查询待审批新闻的总页数
    def search_unreview_count_page(self):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT CEIL(COUNT(*)/10) FROM t_news WHERE state=%s"
            cursor.execute(sql, ["待审批"])
            count_page = cursor.fetchone()[0]
            return count_page
        except Exception as e:
            print(e)
    
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python数据库管理系统(CSDN)是一个用Python编写的数据库管理系统。它是为了方便管理和操作数据库而开发的一个工具。CSDN是中国最大的软件开发者社区之一,提供了大量的技术文章,包括Python数据库管理系统的相关内容。 Python数据库管理系统可以帮助开发人员轻松地连接和操作各种类型的数据库,如关系型数据库(如MySQL,Oracle)和非关系型数据库(如MongoDBRedis)。它提供了一个简洁的接口,让开发人员能够通过Python代码来执行各种数据库操作,如查询、插入、更新和删除等。这个系统不仅提供了基本的CRUD操作,还可以进行高级的数据库管理任务,如数据迁移、备份和恢复等。 CSDN作为一个技术社区,通过发布丰富的教程和文档,帮助开发人员学习和掌握Python数据库管理系统。开发者可以在CSDN上查找相关的文档,了解如何安装和配置Python数据库管理系统,以及如何使用它来连接和管理数据库。此外,CSDN还提供了一个交流平台,让开发人员能够互相讨论和分享Python数据库管理系统的经验和技巧。 总结来说,Python数据库管理系统(CSDN)是一个基于Python的工具,用于连接和操作各种类型的数据库。它提供了简洁的接口和强大的功能,可帮助开发人员轻松管理数据库。通过CSDN这个技术社区,开发人员可以学习和掌握Python数据库管理系统的知识,并与其他开发人员交流和分享经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值