Python开发运维:PyMongo 连接操作 MongoDB

目录

一、理论

1.PyMongo模块

2.Mongo Shell

二、实验

1. Windows11安装MongoDB 7.0.4

2.Windows11安装MongoDB Shell 2.1.0

3.PyMongo 连接 MongoDB(无密码方式)

4.PyMongo 连接 MongoDB(有密码方式)

5.PyMongo 操作 MongoDB (数据库管理)

6.PyMongo 操作 MongoDB (集合管理)

7.PyMongo 操作 MongoDB (文档管理)

三、问题

1.pip安装报错

2.PyCharm如何添加MongoDB插件


一、理论

1.PyMongo模块

(1)概念

在python当中,一般常用于开发中操作monoDB的模块有如下三个:

1)pymongo

2)mongoengine

3)moter
它是python中基于pymongo实现的异步操作库,类似于aiomysql,aiomysql也是python基于pymysql实现的异步库。

2.Mongo Shell

(1)概念

MongoShell是一个互动的JavaScript接口的MongoDB,可以使用MongoShell来查询和更新数据以及执行管理操作。

MongoShell是MongoDB发行版的一个组件, 安装并启动MongoDB后,将MongoShell连接到正在运行的MongoDB实例,MongoDB手册中的大多数示例使用 MongoShell,然而,许多驱动程序也提供了与MongoDB类似的接口。

二、实验

1. Windows11安装MongoDB 7.0.4

(1)下载

Download MongoDB Community Server | MongoDB

(2)选择版本

92022c0c44df4505953974896bf76e05.png

(3)next下一步

ca5e0b0b431e45f1ba070f1d77dd5a19.png

(4)next下一步

e9c89be4865943dc9edbaa204d20e68d.png

(5)这一步选择Custom

90ef11467b86464d94d7b7e422970175.png

(6)OK

a6e1bcd4d1e94083bdd4f1724b58ef13.png

(7)next下一步

a50c69deba1444769a9eb53aeeab4990.png

(8)next下一步

888806525e79431eb3f830d48e0c4835.png

(9)这里取消Install MongoDB compass,next下一步

24897650cd9c46d5827628cb469fa393.png

(10)Install安装

7abff4d57f8147cc9de92f4b0bfd82c8.png

(11)Finish完成

8e02027e45bb49459ae055fe7dac18c4.png

(12) 服务已自启动

342ee525779749fab2c45e4e84f138f0.png

(13)查看默认配置文件

9381e285ca254f649b03c78f2b1b4466.png

(14)软件目录

c8cc3261c28c4df791a9a947a23b1124.png

2.Windows11安装MongoDB Shell 2.1.0

(1)下载

Try MongoDB Tools - Download Free Here | MongoDB

(2)选择版本

8a25b167754940b0b7173d6cdcdfc567.png

(3)软件目录

42fb16ff9bc3401d9c94520a1eee4abf.png

(4)进入bin目录

01e48d6850bc4b3fab144292ceae62d9.png

(5)双击mongosh.exe进入命令行界面

d0b748d96c3941b48797f502acbd2ce5.png

(4)创建数据库

fa816d0880a147cc9306f16b16ffbec2.png

(5)批量插入数据

142e84887e304a0584c46424bb675ee7.png

(6)完成数据导入

b3501ff6d27d4b9683e1eda0f2eaff2d.png

(7)navicat查看数据

77e31c0233f34dcfa35922116b668b48.png

(8)给Admin数据库创建账户管理员

ef220997842241a18df8a197779aea04.png

(9)创建用户自己的数据库的角色

90449787b87441c2a87b3139ae140efd.png

(10)navicat查看数据

0a71c8922d0c4fe38c4c939172cc6cfa.png

3.PyMongo 连接 MongoDB(无密码方式)

(1)安装PyMongo

0e32f5d36d4046c4a34a757a0b5fcdaa.png

(2)数据库连接

# -*- coding: utf-8 -*-
import pymongo
if __name__ == '__main__':
    # 无密码连接mongoDB
    mongo = pymongo.MongoClient('localhost',27017)
    print(mongo)
    #切换数据库
    db = orders = mongo["demo"]
    #切换数据集
    orders = db["orders"]
    #print(orders.find())
    #查询100条数据
    for document in orders.find().limit(100):
        print(document)

① 运行

077146ff756046e5931bd883767b04d9.png

② 输出字典结构.

2829ea1b251a460d808b581047b65c20.png

③运行

0c62c276192d458b89393db5a59f99b1.png

④拿到游标

cbbc067500d44f7da48e7dffd46b6ecd.png

⑤ 运行

5870ace56eef4d1393839b81bdb60f09.png

⑥输出100条数据

60421cb321e84ffa811ec3856c0d0d9c.png

⑦ navicat查看mongodb集合数据

478e7b82c6df4b7cb3a4d8b7a8d6c957.png

4.PyMongo 连接 MongoDB(有密码方式)

(1)数据库连接(方式一)

# -*- coding: utf-8 -*-
import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 有密码连接mongoDB
    username = quote_plus("david")
    password = quote_plus("123456")
    # 获取数据库连接对象
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/david")
    print(mongo)
    # 获取数据库操作对象
    db = mongo["david"]
    print(db)
    #获取集合操作对象
    user_list = db["user_list"]
    # 获取数据
    for document in user_list.find():
        print(document)

① 密码连接成功

737348ea341142af800ced00e5b34ac8.png
 

(2)数据库连接(方式二)

# -*- coding: utf-8 -*-

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)
    print(db)
    collection = db["user_list"]
    print(collection)

    for document in collection.find():
        print(document)

 ① 密码连接

d19262f22b794c7489498d03d133641c.png

②查询数据

23deb5ce7b884f9592cf50b90d59511c.png

③ 成功

8dc264fa09e445b1941908407d4fbbf7.png

④ 成功

0d6c54bad4524e66833c5e045b5b1736.png

5.PyMongo 操作 MongoDB (数据库管理)

(1)数据库管理

# -*- coding: utf-8 -*-

import pymongo
# from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)
    # 新建一个数据库
    orders = db["david"]["orders"]
    # document = {
    #     # "_id": ObjectId(),
    #     # "_id": 1,
    #     "name": "xiaozhao",
    #     "number": "00000001",
    # }
    # ret = orders.insert_one(document)
    # 查看数据库列表[只会列出有文档数据的数据库]
    print(mongo.list_database_names())
    # print(db["david"].list_indexes())      # 查看集合的索引
    # print(db.list_collection_names())     # 查看所有库下的所有集合
    # print(mongo["david"])

(2)新建数据库

7dfc818ea0b64ba3bebe66f4d96b08a4.png

(3)成功

fa68bed29fbe4a25b7f667f46cb45dff.png

(4)查看数据库列表(只会列出有文档数据的数据库)

607632f0aae74d679ff3722ff78e5906.png

(5)shop因为没有内容,所以没有被创建的

8f9707b2ffc14b7b8f3ec87fa2a5e9cc.png

(6)查看所有库下的所有集合

4d60f79e444e4abb93f606b88cc2d1dc.png

(7)成功

c8a54830787a4ba99b8df2277d10d8f7.png


 

6.PyMongo 操作 MongoDB (集合管理)

(1)集合管理

# -*- coding: utf-8 -*-

import pymongo
# from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)
    # 查看数据库列表[只会列出有文档数据的数据库]
    print(mongo.list_database_names())

    # 查看指定数据的集合列表[只会列出有文档数据的集合]
    print( db.list_collection_names() )

    # 获取指定名称对应的集合操作对象
    user_list = db["orders"]

    #给集合添加数据
    document = {
        "name": "xiaoli",
        "password": "123456"
    }
    user_list.insert_one(document)

    # 删除集合
    db["david.orders"].drop()

    # 查看指定数据的集合列表[只会列出有文档数据的集合]
    print( db.list_collection_names() )

① 查看指定数据的集合列表(只会列出有文档数据的集合)

c20e334e3f984b93991e86c1bef3c6f2.png

② 成功

a42bcc459ec2426bb6c27cb82f594c4f.png

③ david库下新建orders表

3f24a8379cf54d3aa4bd888057b5502b.png

④ 删除

2cd6feb7fa614b5cba07ba16ffca83cd.png

7.PyMongo 操作 MongoDB (文档管理)

(1)添加文档

# -*- coding: utf-8 -*-

import pymongo
# from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]
    # # 添加一个文档
    # document = {"name": "xiaoming", "mobile": "130XXXXXXXX", "age": 16}
    # ret = user_list.insert_one(document)
    # print(ret.inserted_id)  # 返回InsertOneResult对象
    # 插入文档时,如果没有指定_id,将自动分配一个唯一的id。

    # 添加多个文档
    document_list = [
        {"name": "xiaoqian", "mobile": "136XXXXXXXX", "age": 17},
        {"name": "xiaosun", "mobile": "135XXXXXXXX", "age": 18},
        {"name": "xiaowei", "mobile": "139XXXXXXXX", "age": 18},
    ]
    ret = user_list.insert_many(document_list)

    # 打印文档_id值列表:
    print(ret.inserted_ids)

① 添加一个文档

83cdedbd37834b71a00cdfab7ba39f73.png

②成功

40a972a295614249866f0ba162e78ba4.png

③ mongosh查看已插入.

6a822570d9da4298901aa5b7772d972c.png

④ 添加多个文档

d78653bb06dc4cb29927806756aad35a.png

⑤ 最后3个显示已插入

334cbcb57ff042ffb2eb31ac7181ad00.png

(2)删除文档

# -*- coding: utf-8 -*-

import pymongo
from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]


    # 删除一个文档
    # query1 = {"_id": ObjectId("656803f10a84aec77e378334")}
    # ret1 = user_list.delete_one(query1)
    # print(ret1)
    # print(ret1.deleted_count)
    #
    # query2 = {"name": "xiaoming"}
    # ret2 = user_list.delete_one(query2)
    # print(ret2)
    # print(ret2.deleted_count)

    # 删除多个文档
    query = {"name": "xiaoming"}
    ret = user_list.delete_many(query)
    print(ret)
    print(ret.deleted_count)    # 删除总数

    # 可以通过删除集合的方式,达到删除所有文档的效果
    # user_list.drop()

①查看最后一条数据id,准备删除2b8a208a547b4e81b2879b3ded013e32.png

② 运行删除代码

fc75efafe0bf408a96613b6132ddcdcc.png

③ 已删除

ca38d29e0ba141908c70379ab9cb6d79.png

④ mongosh查看

b6e1303541bd4f258d197743f805ed30.png

⑤ 插入4个xiaoming

879dd6f7a9d84277bea446c6a99a9211.png

⑥显示已插入

4bce662a0ceb40978039256e7afdda6b.png

⑦ 删除多个文档

e19a7000021148a3a0971a519f3a4d5d.png

⑧ 查看运行结果,删除了4个

923c3442993b475884f62123568f6f76.png

⑨ 已删除

3484c5824c1449c5aff243171ec6a2be.png

⑩ navicat显示也已删除

979f470c64f34377853dc51d4335b63a.png

(3)更新文档

# -*- coding: utf-8 -*-

import pymongo
from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    #db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]

    # #更新一条数据
    # query = {"name": "xiaobai"}
    # data = {"$set": {"age": 22}}
    # ret = user_list.update_one(query, data)
    # print(ret.modified_count)      #修改数量

    #更新所有文档
    query = {"mobile": {"$regex": "^13"}}
    data = {"$inc": {"age": 2}}
    ret = user_list.update_many(query, data)
    print(ret)
    print(ret.modified_count)

①查看当前xiaobai年龄为16岁

d7cf0269d86642279c318365c878e101.png

②修改数据

 caebe2a4df7c480da71723cdc0ee133f.png

③运行成功

ca200d9db0b34b5188cac468b1bbe8c9.png
 

④查看数据

2c1cd9847a0742689e609c81c69e6531.png

⑤ xiaobai年龄为22岁

4248ad2cdd1845279bf81daed0152654.png

⑥有2人有手机号

68abc4288ba6499c947c6472c054c9fe.png

⑦ 13开头手机号年龄自增2

25e3d30246104556aa16f0739a219706.png

⑧ 运行成功

0ba491d689ca44a1a1c2337b314d484f.png

(4)查询文档

# -*- coding: utf-8 -*-

import pymongo
from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    # db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]

    # 查看一个文档,返回结果就是一个字典
    # ret = user_list.find_one()
    # print(ret["name"])
    # print(ret["child"])
    # print(ret["child"]["age"])


    # 统计文档数量,返回结果就是整数
    # ret = user_list.count()
    # print(ret)

    # # 查看所有文档
    # for document in user_list.find():
    #     print(document)

    # # 投影查询,去掉id
    # for document in user_list.find({},{"_id":0}):
    #     print(document)

    # # 查看文档部分字段,find和find_one的第二个参数表示控制字段的显示隐藏,1为显示,0为隐藏
    # for document in user_list.find({}, {"_id": 0, "name": 1, "mobile": 1}):
    #     print(document)

    # # 条件查询
    # query = {"age": 20}
    # document_list = user_list.find(query)
    # for document in document_list:
    #     print(document)

    # # 比较运算符
    # query = {"age": {"$gt": 17}}
    # document_list = user_list.find(query)
    # for document in document_list:
    #     print(document)

    # query = {"age": {"$eq": 20}}
    # document_list = user_list.find(query)
    # for document in document_list:
    #     print(document)

    # # 多个字段排序:
    # #       sort([("键1",1),("键2",-1)])
    # document_list = user_list.find().sort("age")
    # for document in document_list:
    #     print(document)
    #
    # # 限制查询结果数量
    # document_list = user_list.find().limit(3)
    # for document in document_list:
    #     print(document)

    # # 偏移、跳过
    # #	skip(int)
    # document_list = user_list.find().limit(3).skip(3)  # 从第3篇文档开始获取3篇文档
    # for document in document_list:
    #     print(document)

    # # 自定义条件函数
    # document_list = user_list.find({"$where": "this.age==20"})
    # for document in document_list:
    #     print(document)

    document_list = user_list.find({"$where": "this.age>=18"}).sort("age",-1)
    for document in document_list:
        print(document)

①查看一个文档

292b53f525694c3d91029ee5409aaf88.png

②返回结果就是一个字典

98913bb380be40c6a33cbe2d82d81bf5.png

③修改

8bf087ffb1374917836257e8581d8f77.png

④运行结果

c99bbfbbe7844c328706054e1a8d131f.png

⑤修改

cc6e8fe5b6f540e5a738e2683e55124e.png

⑥ child

6805d9a7260943c3b9d656a0394e1f9c.png

⑦ 修改

a61aec80b9ad4f6d802f55ac2e103995.png

⑧child的age

ea8008bc33ba426a886e6c2895c4839d.png

⑨修改

9831c8b7c3b94345ac88167e0e720c3c.png

⑩查看所有文档

e3802a3f56094192adccfaede23082af.png

⑪投影查询

9cc11923cff34cdbbb2dfbc36441e56b.png

⑫已去掉id

3120bcacac564155b0fdc357089ea7a0.png

⑬查看文档部分字段

4e6653f7e17a4d67bf675225f0292ef5.png

⑭条件查询

699410015f8842ec82db838a44adf5bc.png

⑮条件查询2

064f67ba262747b3bc5b32bb60ebbb73.png

⑯比较运算符

ef04a8df514248f2b31ae18ce9c3d0d5.png

⑰多个字段排序

dda20ec9562f4c138635765729e892d7.png

⑱限制查询结果数量

96ef7e32241847638a62220ce871ad94.png

⑲偏移、跳过

b98766223f4b488f9e7b23a4b2a60e32.png

⑳偏移、跳过2

45b8eccd2fff4680b49e69b437c47cbe.png

㉑定义条件函数,倒叙排序

1909607bdde142bca86ecea485b9feab.png

三、问题

1.pip安装报错

(1)报错

11554adfe80c4f6eb565c909c097327a.png

(2)原因分析

网络问题

(3)解决方法

修改下载源

pip install pymongo -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2411c56257484a6089477c9987b19fc6.png

2.PyCharm如何添加MongoDB插件

(1)搜索插件

8093711bbfe34ea7a1d54bd38397441b.png

(2)软件左下角进入插件

759f1c62b5114b01a00ea6da05692c2d.png

(3)测试成功

76cf3322d85b4ecf872915077269ce63.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq消息队列实验

实验目的:实现异步通信 实验条件: 主机名 IP地址 组件 test1 20.0.0.10 rabbitmq服务 test2 20.0.0.20 rabbitmq服务 test3 20.0.0.30 rabbitmq服务 实验步骤: 1、安装rabbitmq服务 2、erlang进入命令行,查看版本 …

zookeeper集群和kafka集群

(一)kafka 1、kafka3.0之前依赖于zookeeper 2、kafka3.0之后不依赖zookeeper,元数据由kafka节点自己管理 (二)zookeeper 1、zookeeper是一个开源的、分布式的架构,提供协调服务(Apache项目&…

91基于matlab的以GUI实现指纹的识别和匹配百分比

基于matlab的以GUI实现指纹的识别和匹配百分比,中间有对指纹的二值化,M连接,特征提取等处理功能。数据可更换自己的,程序已调通,可直接运行。 91M连接 特征提取 (xiaohongshu.com)

国产linux单用户模式破解无密码登陆 (麒麟系统用户登录密码遗忘解决办法)

笔者手里有一批国产linu系统,目前开始用在日常的工作生产环境中,我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux,统信UOS等,基本都是基于debian再开发的linux。 问题描述: 因为…

Windows系列:windows server 2016 下域环境的搭建(完整版)

windows server 2016 下域环境的搭建(完整版) windows server 2016 下域环境的搭建在搭建之前简单介绍一下基础知识:一、环境介绍 :1.这里用拓扑图进行展示:2.所有环境配置如下 二、搭建主域:一. 创建主域1…

天眼销:精准的企业名录

企业名录的重要性,对于销售而言都是极其重要的。本期为家人们分享如何正确挑选出优质的企业名录渠道,避免走一些弯弯坑坑。 为了有效利用企业名录进行客户开发,您需要关注信息的准确性、可提供的资源数量以及信息的时效性。能否根据您的需求…

统信UOS和vue.js的一个兼容问题

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 这事到现在说起还很奇怪,在UOS20(硬件为华为鲲鹏服务器,arm架构,g8.3)上部署uve.js&#xff0…

Windows10中在Visual Studio2017中VC++项目安装使用GoogleTest库

Windows10中在Visual Studio2017中VC项目安装使用GoogleTest库 在Windows10中VC程序中可以不用自己手动下载GoogleTest源代码,可以直接通过【项目】-> 【管理 NuGet 程序包】-> 【浏览】-> 搜索 googletest, 找到Microsoft.googletest.v140.wi…

LabVIEW开发自适应降噪ANC

LabVIEW开发自适应降噪ANC 在许多情况下,信号很嘈杂,必须消除噪声。自适应降噪(ANC)是可用于消除信号噪声的主要实时方法之一。可以使用LabVIEW自适应滤滤器工具包来设计ANC应用程序。本文介绍使用自适应筛选器工具包的ANC的一些…

GAN:WGAN前作

WGAN前作:有原则的方法来训练GANs 论文:https://arxiv.org/abs/1701.04862 发表:ICLR 2017 本文是wgan三部曲的第一部。文中并没有引入新的算法,而是标是朝着完全理解生成对抗网络的训练动态过程迈进理论性的一步。 文中基本是…

Neo4j 程序开发 JavaAPI 嵌入式开发模式(头歌)

文章目录 第1关:JavaAPI 嵌入式开发模式任务描述相关知识创建 Neo4j 数据库启动 Neo4j 数据事务创建节点创建节点关系将创建的数据库设置为默认数据库 编程要求测试说明答案代码修改配置文件,更改默认 Neo4j 数据库代码文件 第1关:JavaAPI 嵌…

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

网络安全应急响应-Server2228(环境+解析)

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接)用户名:root,密码:p@ssw0rd123

【稳定检索|投稿优惠】2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)

2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024) 2024 International Conference on Biological Neuroengineering and Health Big Data(ICBNHBD) 一、【会议简介】 2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)&#xff0c;这场科学盛宴&#xff0c;会议在中…

开关电源工作时,如何抑制纹波和减小高频噪声?

开关电源的纹波和噪声是一个本质问题&#xff0c;换而言之无论纹波和噪声多么小&#xff0c;也无法从根本上去除&#xff0c;再绝对的讲开关电源无论成本怎么提高&#xff0c;也无法完全达到线性电源的性能和特点。那么&#xff0c;通常抑制或减少它的做法有五种&#xff1a; …

2分图匹配算法

定义 节点u直接无边&#xff0c;v之间无边&#xff0c;边只存在uv之间。判断方法&#xff1a;BFS染色法&#xff0c;全部染色后&#xff0c;相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min&#xff08;u&#xff0c; v&#xff09;。贪心算法可能导致&…

OLED双面显示广告机的应用场景

OLED双面显示广告机是一种创新的广告设备&#xff0c;它具有双面显示屏幕&#xff0c;可以同时向两个方向展示广告或信息。这种设备被广泛应用于各种场景&#xff0c;例如&#xff1a; 商业展示&#xff1a;在大型商业场所&#xff0c;如购物中心、百货商场等&#xff0c;OLED双…

WPS导出的PDF比较糊,和原始的不太一样,将带有SVG的文档输出为PDF

一、在WPS的PPT中 你直接输出PDF可能会导致一些问题&#xff08;比如照片比原来糊&#xff09;/ 或者你复制PPT中的图片到AI中类似的操作&#xff0c;得到的照片比原来糊&#xff0c;所以应该选择打印-->高级打印 然后再另存为PDF 最后再使用AI打开PDF文件再复制到你想用…

redis单机版本安装

redis单机版本安装 1.redis单机版源码编译安装搭建(4.0示例) redis下载地址 https://redis.io/download redis源码编译 #!/bin/sh yum install -y wget gcc gcc-c make tar openssl openssl-devel cmakecd /usr/local/src wget http://download.redis.io/releases/redis-4…

webpack优化打包速度

webpack打包速度太慢 优化 1.多线程打包 js压缩和loader 2.优化启动速度 hard-source-webpack-plugin 3.删除无用的 分析类插件 4.DllPlugin通道打包 1.webpack多线程打包 loader loader 使用 thread-loader 将他放置你要使用的loader前面就行&#xff0c;不过这个lorder例如s…