基于Pycharm与数据库的新闻管理系统(3)MongoDB

pip3 install pymongo

1.连接到MongoDB数据库

文件地址:db/mongo_db.py

从 pymongo 模块中导入 MongoClient 类;创建 MongoClient 的一个实例,该实例尝试使用提供的MongoDB连接字符串连接到MongoDB服务器。

from pymongo import MongoClient
client = MongoClient('mongodb://admin:admin123456@localhost:27017')

2.新闻添加 

2.1 创建操作类

文件地址:db/mongo_news_dao.py

新闻数据进行交互,并定义了两个方法用于与MongoDB数据库中的新闻数据进行交互。

from db.mongo_db import client
class MongoNewsDao:#添加函数正文记录def insert(self,title,content):try:client.news.news.insert_one({"title":title,"content":content})except Exception as e:print(e)#查找新闻正文主键def search_id(self,title):try:news = client.news.news.find_one({"title":title})return str(news["_id"])except Exception as e:print(e)

2.2 创建业务类

文件地址:service/news_service.py

处理新闻的添加操作,这个类依赖于 MongoNewsDao 类:

来与 MongoDB 和 MySQL 数据库同时进行交互。

# 导入新闻dao模块
from db.mongo_news_dao import MongoNewsDao
# 创建新闻业务类
class NewsService:#实例化新闻Dao对象__mongo_news_dao = MongoNewsDao()#添加新闻def insert_news(self,title,editor_id,type_id,👉content👈,is_top):👉#将添加的新闻写入到mongodb数据库中后self.__mongo_news_dao.insert(title,content)#获得新闻id值content_id = self.__mongo_news_dao.search_id(title)👈#将新闻信息添加至mysql中self.__news_dao.insert_news(title, editor_id, type_id, content_id, is_top)

2.3 实现数据库添加操作

实现交互式的Python脚本,用于发表新闻。

这个脚本允许用户输入新闻标题、选择新闻类型、输入新闻内容和置顶级别,并最终提交新闻。

if opt == "1.发表新闻":os.system("cls")title = input("\n\t新闻标题")userid = __user_service.search_userid(username)result = __type_service.search_list()for index in range(len(result)):one = result[index]print(Fore.LIGHTBLUE_EX, "\n\t%d.%s" % (index + 1, one[1]))print(Style.RESET_ALL)opt = input("\n\t类型编号:")type_id = result[int(opt) - 1][0]👉# 添加新闻内容path = input("\n\t输入文件路径:")file = open(path, "r", encoding="utf-8")content = file.read()file.close()👈is_top = input("\n\t置顶级别(0-5):")is_commit = input("\n\t是否提交(Y/N):")if is_commit == 'y' or is_commit == 'Y':__news_service.insert_news(title, userid, type_id, content, is_top)print("\n\t保存成功(3秒后自动返回)")time.sleep(3)

3.新闻更改

3.1 根据新闻id查询新闻内容

from db.mysql_db import pool
class NewsDao:  #根据新闻id查询新闻内容def search_content_id(self,page):try:# 获得连接项conn = pool.get_connection()# 获得游标cursor = conn.cursor()# 创建sqlsql = """ SELECT content_id FROM t_news where id=%s """# 执行sqlcursor.execute(sql,[id])# 获得查询结果result = cursor.fetchone()[0]return result# 返回获得结果except Exception as e:print(e)finally:if "conn" in dir():conn.close()

3.2 根据id修改新闻内容

from db.mongo_db import client
from bson.objectid import ObjectId
class MongoNewsDao:# 根据id修改新闻内容def update(self, id, title, content):try:client.news.news.update_one({"_id":ObjectId(id)},{"$set":{"title":title,"content":content}})except Exception as e:print(e)

3.3 更新修改新闻信息

from db.news_dao import NewsDao
from db.redis_news_dao import RedisNewsDao
from db.mongo_news_dao import MongoNewsDao
class NewsService:#更新修改新闻信息def update(self,id,title,type_id,👉content,👈is_top):👉content_id = self.__news_dao.search_content_id(id)self.__mongo_news_dao.update(content_id,title,content)👈self.__news_dao.update(id,title,type_id,content_id,is_top)self.delete_cache(id)#删除缓存中修改的新闻信息

3.4 实现数据库更改操作

elif int(opt) >= 1 and int(opt) <= 5:
news_id = result[int(opt) - 1][0]
result = __news_service.search_by_id(news_id)
title = result[0]
type = result[1]
is_top = result[2]
print("\n\t新闻原标题:%s" % (title))
new_title = input("\n\t新标题")
print("\n\t新闻原类型:%s" % (type))
result = __type_service.search_list()
for index in range(len(result)):t = result[index]print(Fore.LIGHTBLUE_EX, "\n\t%d.%s" % (index + 1, t[1]))
print(Style.RESET_ALL)
opt = input("\n\t类型编号:")
new_type = result[int(opt) - 1][0]
# content_id = 10
👉# 修改新闻正文
path = input("\n\t输入文件路径:")
file = open(path, "r", encoding="utf-8")
content = file.read()
file.close()👈
print("原置顶级别%s" % (is_top))
new_is_top = input("\n\t置顶级别(0-5):")
is_commit = input("\n\t是否提交?(Y/N)")
if is_commit == 'y' or is_commit == 'Y':__news_service.update(news_id, new_title, new_type,👉content,👈 new_is_top)print("\n\t保存成功(3秒自动返回)")time.sleep(3)

4. 新闻获取

4.1 根据正文id获取正文信息

文件地址:db/mongo_news_dao.py

from db.mongo_db import client
from bson.objectid import ObjectId
class MongoNewsDao:#根据正文id获取正文信息def search_content_by_id(self,id):try:news = client.news.news.find_one({"_id":ObjectId(id)})return news["content"]except Exception as e:print(e)

4.2 根据新闻内容id查找新闻内容信息

文件地址:service/news_service.py

from db.mongo_news_dao import MongoNewsDao
class NewsService:#根据新闻内容id查找新闻内容信息def search_content_by_id(self,id):content = self.__mongo_news_dao.search_content_by_id(id)return content

4.3 实现数据库查询操作

文件地址:app_py.py

elif int(opt) >= 1 and int(opt) <= 5:
# 获得新闻id值
news_id = result[int(opt) - 1][0]  # 获得对应行数及列
# 调用news_service的审批函数
__news_service.update_unreview_news(news_id)
# 12.24 新闻缓存
result = __news_service.search_cache(news_id)
title = result[0]
username = result[1]
type = result[2]
content_id = result[3]
# 查询新闻正文👇
# content = "100"
content = __news_service.search_content_by_id(content_id)
is_top = result[4]👆
create_time = str(result[5])
__news_service.cache_news(news_id, title, username, type, content, is_top, create_time)

5.新闻清除

5.1 根据id删除新闻信息

文件地址:db/mongo_news_dao.py

from db.mongo_db import client
from bson.objectid import ObjectId
class MongoNewsDao:#根据id删除新闻信息def delete_content_by_id(self,id):try:client.news.news.delete_one({"_id":ObjectId(id)})except Exception as e:print(e)

5.2 清除新闻

文件地址:service/news_service.py

from db.news_dao import NewsDao
from db.redis_news_dao import RedisNewsDao
from db.mongo_news_dao import MongoNewsDao
class NewsService:#删除新闻def delete_news(self,id):content_id = self.__news_dao.search_content_id(id)self.__news_dao.delete_by_id(content_id)self.__news_dao.delete_by_id(id)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497079.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go语言的成神之路-筑基篇-gin常用功能

第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能&#xff1a; 使用场景&#xff1a; 可能的错误&#xff1a; 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测&#xff01;五模型对比&#xff01;Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好&#xff0c;替换数据集后&#xff0c;仅运…

12.27【net】【review】【day3】

第三章 l CSMA/CD ( Carrier Sense Multiple Access with Collision Detection) &#xff1a; 载波监听多点接入 / 碰撞 检测。 l 多点接入 &#xff1a; 说明这是总线型 网络。许多 计算机以多点接入的方式连接在一根总线上。 l 载波监听&#xff1a; 即“ 边发送边监听”。…

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码&#xff0c;也有同学提到老师要增加数据库管理数据的功能&#xff0c;本篇文章就来介绍下python操作数据库&#xff0c;同时也对上次分享的学生管理系统进行了改进了&#xff0c;增加了数据库&#xff0c…

实现类似gpt 打字效果

1. css的动画&#xff08;animation) css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 具体的可以看MDN链接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口&#xff0c;同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能&#xff1a; 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…

软考:系统架构设计师教材笔记(持续更新中)

教材中的知识点都会在。其实就是将教材中的废话删除&#xff0c;语言精练一下&#xff0c;内容比较多&#xff0c;没有标注重点 系统架构概述 定义 系统是指完成某一特定功能或一组功能所需要的组件集&#xff0c;而系统架构则是对所有组件的高层次结构表示&#xff0c;包括各…

反应力场的生成物、反应路径分析方法

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

HarmonyOS NEXT 实战之元服务:静态案例效果---妙语集语

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …

C#WPF基础介绍/第一个WPF程序

什么是WPF WPF&#xff08;Windows Presentation Foundation&#xff09;是微软公司推出的一种用于创建窗口应用程序的界面框架。它是.NET Framework的一部分&#xff0c;提供了一套先进的用户界面设计工具和功能&#xff0c;可以实现丰富的图形、动画和多媒体效果。 WPF 使用…

【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode

文章目录 有效的数独解数独单词搜索黄金矿工不同的路径||| 有效的数独 递归解法思路 将每个数独的格子视为一个任务&#xff0c;依次检查每个格子是否合法。 如果当前格子中的数字违反了数独规则&#xff08;在行、列或 33 小方块中重复&#xff09;&#xff0c;直接返回 Fals…

SpringCloudAlibaba实战入门之路由网关Gateway断言(十二)

上一节课中我们初步讲解了网关的基本概念、基本功能,并且带大家实战体验了一下网关的初步效果,这节课我们继续学习关于网关的一些更高级有用功能,比如本篇文章的断言。 一、网关主要组成部分 上图中是核心的流程图,最主要的就是Route、Predicates 和 Filters 作用于特定路…

进军AI大模型-环境配置

语言环境配置 合法上网工具&#xff1a; 这个T子试试&#xff0c;一直稳定。走我链接免费用5天: https://wibnm.com/s/ywtc01/pvijpzy python版本&#xff1a; python3.12 Langchain: Introduction | &#x1f99c;️&#x1f517; LangChain v0.3 9月16日升级的版本 pip3…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串&#xff1f;2、两个引号之间加上空格 好的&#xff0c;我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别&#xff0c;以及它们在 SQL 查询中的作用&#xff1a; 1. we_chat_union_id IS NOT NULL 含…

elementUI——upload限制图片或者文件只能上传一个——公开版

最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是上传图片&#xff0c;有且仅能上传一张。 效果图如下&#xff1a; 功能描述&#xff1a;上传图片时&#xff0c;仅支持单选&#xff0c;如果上传图片成功后&#xff0c;展示图片&#xff0c;并隐藏添加图片的…

【RabbitMQ高级篇】消息可靠性问题(1)

目录 1.消息可靠性 1.1.生产者消息确认 1.1.1.修改配置 1.1.2.定义Return回调 1.1.3.定义ConfirmCallback 1.2.消息持久化 1.2.1.交换机持久化 1.2.2.队列持久化 1.2.3.消息持久化 1.3.消费者消息确认 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消费失败重试机制…

MyBatis知识点笔记

目录 mybatis mapper-locations的作用&#xff1f; mybatis configuration log-impl 作用&#xff1f; resultType和resultMap的区别&#xff1f; 参数 useGeneratedKeys &#xff0c;keyColumn&#xff0c;keyProperty作用和用法 取值方式#和$区别 动态标签有哪些 MyBat…

Vue3 使用OCR识别图片文字

Tesseract.js 是一个javascript库&#xff0c;可以从图像中获取几乎任何语言的单词&#xff0c;支持文本转pdf功能&#xff0c;精准度很高。 1. 安装 npm install tesseract.js 2. 示例代码&#xff08;vue3版&#xff09; <template><div class"container&qu…

【多维DP】力扣3366. 最小数组和

给你一个整数数组 nums 和三个整数 k、op1 和 op2。 你可以对 nums 执行以下操作&#xff1a; 操作 1&#xff1a;选择一个下标 i&#xff0c;将 nums[i] 除以 2&#xff0c;并 向上取整 到最接近的整数。你最多可以执行此操作 op1 次&#xff0c;并且每个下标最多只能执行一…

python+PyMuPDF库:(一)创建pdf文件及内容读取和写入

目录 文档操作 打开文档 获取文档信息 删除页 复制页 移动页 选择重构合并 保存关闭 页对象操作 内容读取 获取页对象的字体样式 插入文本标签 插入文本内容 字体设置 insert_text添加文本 insert_textbox添加文本 插入图片 获取页面注释、链接、表单字段 …