【跨库查询、多库查询】.NET开源 ORM 框架 SqlSugar 系列


文章目录

  • 一、跨库方式1:跨库导航
  • 二、手动跨库查询
  • 三、同服务器:自动查询跨库查询
    • 3.1 Mysql和SqlServer自动
    • 3.2 自动: PgSql跨Scheme查询
    • 3.3 其他库同服务器
  • 四、跨服务器:自动跨库查询
    • 4.1 配置SqlServer dblink
    • 4.2 配置 Oracle dblink
    • 4.3 配置 PgSql Pwd外部表
    • 4.4 其他跨服务器联表
  • 五、跨库子查询
    • 5.1 用ThenMapper实现
    • 5.2 Subqueryable
    • 5.3 嵌套查询或者Unionall
  • 六、.NET开源 ORM 框架 SqlSugar 系列🪭🪭🪭


一、跨库方式1:跨库导航

最低版本支持:(5.1.3.24)

  • ✅优点1:支持跨服务器,支持跨数据库品种, 支持任何类型数据库
  • ✅优点2: 超级强大的性能,能达到本库联表性能
  • 🚫缺点:不支持 子表过滤主表 (方案有 ToList 后在内存过滤, 如果分页可以查 前1000条 主表在内存分页 前端只显示 前10页 )
[Tenant("db2")] //实体标为db2
public class OrderItem{[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int ItemId { get; set; }public int OrderId { get; set; }public decimal? Price { get; set; }[SqlSugar.SugarColumn(IsNullable = true)]public DateTime? CreateTime { get; set; }[Navigate(NavigateType.OneToOne,nameof(OrderId))] //设置关系 对应Order表主键public Order Order { get; set; }}
[Tenant("db1")] //实体标为db1
public class Order{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }[SugarColumn(IsNullable = true)]public DateTime CreateTime { get; set; }[SugarColumn(IsNullable = true)]public int CustomId { get; set; }[Navigate(NavigateType.OneToMany, nameof(OrderItem.OrderId))]//public List<OrderItem> Items { get; set; }}//通过ConfigId进行区分是哪个库
var db = new SqlSugarClient(new List<ConnectionConfig>()
{new ConnectionConfig(){ConfigId="db1",DbType=DbType.Sqlite,ConnectionString="DataSource=/Db_OrderDb.sqlite",IsAutoCloseConnection=true},new ConnectionConfig(){ConfigId="db2",DbType=DbType.Sqlite,ConnectionString="DataSource=/Db_OrderItemDb.sqlite",IsAutoCloseConnection=true }
});//注意:如果是接口需要
//db.AsTenant().QueryableWithAttr<OrderItem>()//通过实体类特性Tenant自动映射不同数据库进行查询
var list=db.QueryableWithAttr<OrderItem>()
.Includes(z => z.Order)
.ToList(); //1行代码就搞定了2个库联表查询//不通过特性实现跨库导航
var list =db.GetConnection("db1").Queryable<OrderItem>()//Orderitem是db1.CrossQuery(typeof(Order), "db2")//Order是db2.Includes(z => z.Order).ToList();

如果想详细了解,请移步 详细教程 (5.1.3.25)

二、手动跨库查询

  • ✅优点:联表语法100%可以用

  • 🚫缺点:只支持个别数据库,并且跨服务器比较麻烦需要配置dblink

大多数的数据库支持下面的写法,我们可以通过 As 指定是哪个库, 查询的时候用别名

🎯注意:不同数据库写法有区别 下面是 SqlServer 例子 : 库名 .dbo.表名

//单表跨库
var  list=db.Queryable<Order>().AS("xx.dbo.Order2019").ToList();//SqlServer (跨库用dblink)
var list1 = db.Queryable<Order>() //主表用当前db就行了.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId,"yy.dbo.OrderItem")  .LeftJoin<Custom>((o, i, c) => c.Id == o.CustomId,"zz.dbo.Custom") .Where((o,i,c)=> o.TypeId==1).Select((o,i,c)=>new classA() { oid=o.Id , iname=i.Name }).ToList();//MySql (只能同服务器)       
var list1 = db.Queryable<Order>().  //如果跨服务器需要配置dblink,语法上每种数据库有点小差异.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId,"yy.OrderItem")  .LeftJoin<Custom>((o, i, c) => c.Id == o.CustomId,"zz.Custom") .Where((o,i,c)=> o.TypeId==1).Select((o,i,c)=>new classA() { oid=o.Id , iname=i.Name }).ToList(); //Oracle  
var list1 = db.Queryable<Order>() .LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId,"\"ORDERITEM\"@dblink_name")  .LeftJoin<Custom>((o, i, c) => c.Id == o.CustomId,"\"CUSTEM\"@dblink_name") .Where((o,i,c)=> o.TypeId==1).Select((o,i,c)=>new classA() { oid=o.Id , iname=i.Name }).ToList();     //其他库同理//老版本:多表跨库
var list1 = db.Queryable<Order>().AS("xx.dbo.order") // AS("").LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId).AS<OrderItem>("yy.dbo.OrderItem") //AS<T>.LeftJoin<Custom>((o, i, c) => c.Id == o.CustomId) .AS<Custom>("zz.dbo.Custom")//AS<T>.Select((o,i,c)=>new classA() { oid=o.Id , iname=i.Name }).ToList();//获取表名可以减少字符串操作var tableName=db.EntityMaintenance.GetTableName<T>()       //如果有2个AS<T>是相同我们可以这么写.LeftJoin(db.Queryable<T>().AS("xx.dbo.zzzz"),(o,i)=>o.id==i.id)

请升级到5.1.4.86-preview01+

三、同服务器:自动查询跨库查询

3.1 Mysql和SqlServer自动

🎯注意:

  1. 只支持 MySqlSqlServer 同服务器并且是同一种类型的库(你有办法支持其他库可以反馈给我)
  2. 查询用的是 QueryableWithAttr 不是 Queryable
//声名SqlSugar对象
var db = new SqlSugarClient(new List<ConnectionConfig>()
{new ConnectionConfig(){ConfigId="A",DbType=DbType.SqlServer,ConnectionString=..,IsAutoCloseConnection=true},new ConnectionConfig(){ConfigId="B",DbType=DbType.MySql,ConnectionString=..,IsAutoCloseConnection=true  },new ConnectionConfig(){ConfigId="C",DbType=DbType.MySql,ConnectionString=..,IsAutoCloseConnection=true  }
});//实体配置是哪个库
[Tenant("A")] //实体标为A表示是A库
public class OrderItem
[Tenant("B")] //实体标为B表示是B库
public class Order//联表查询要5.1.4.66+才支持
var list = db.QueryableWithAttr<Order>() //根根据ConfigId自动实现跨库.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId)  .LeftJoin<Custom>((o, i, c) => c.Id == o.CustomId) .Where((o,i,c)=> o.TypeId==1).Select((o,i,c)=>new classA() { oid=o.Id , iname=i.Name }).ToList();//ISqlSugarClient需要转一下租户接口,才能用租户方法
var list =db.AsTenant().QueryableWithAttr<Order>()....

3.2 自动: PgSql跨Scheme查询

var db = new SqlSugarClient(new List<ConnectionConfig>()
{new ConnectionConfig(){ConfigId="A",DbType=DbType.PostgreSQL,ConnectionString="..",IsAutoCloseConnection=true},new ConnectionConfig(){ConfigId="B",DbType=DbType.PostgreSQL,DbLinkName="public",//重点ConnectionString=".....;searchpath=public"//重点 ,IsAutoCloseConnection=true  },     
});
var x3 = db.QueryableWithAttr<OptRole>().LeftJoin<Role>((x1, y1) => x1.roleId == y1.id)//Left Join时会加上public..ToList();//ISqlSugarClient需要转一下租户接口,才能用租户方法
var list =db.AsTenant().QueryableWithAttr<Order>()....

3.3 其他库同服务器

🕹️找库规则3种:

  1. SqlServer: 库名.dbo.表名
  2. PgSql或者同类库:有配置 DbLinkNamesearchpath : DbLinkName.表名
  3. 其他库: 库名.表名

用法就上面3种用法,如果发现哪个数据库不支持可以和我反馈。

四、跨服务器:自动跨库查询

除了 sqlite,其他的应该都支持 dblink 配置,只要能配置 dblink 就能跨库查询,也支持同服务器跨库。

4.1 配置SqlServer dblink

请升级5.1.4.72-preview02+

var db = new SqlSugarClient(new List<ConnectionConfig>()
{new ConnectionConfig(){ConfigId="A",DbType=DbType.SqlServer,ConnectionString=..,IsAutoCloseConnection=true  },new ConnectionConfig(){ConfigId="B",DbType=DbType.SqlServer,//有些用户可以用IP跨库//DbLinkName="[192.168.1.110].db240425.dbo."DbLinkName="db1.ecology2013_SHQC2.dbo",//IP不能连在配置DbLinkConnectionString="..",IsAutoCloseConnection=true  }
});
//实体配置是哪个库
[Tenant("B")] //实体标为A表示是A库
public class OrderItem//联表查询要5.1.4.66+才支持
var list1 = db.QueryableWithAttr<Order>() //根根据ConfigId自动实现跨库.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId)  .ToList();
//生成Sql        
//Left join db1.ecology2013_SHQC2.dbo.OrderItem

下面是 SqlServer 的例子

  • ✅ 可以企业管理器里添加 linkserver 实现。
  • ✅ 使用 sp_addlinkedserver 创建一个链接的服务器,使其允许对分布式的、针对 OLEDB 数据源的异类查询进行访问。
  • ✅ 在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。

🎢 步骤:

  1. 创建 linkserver
 EXEC sp_addlinkedserver@server='DB1',--被访问的服务器别名@srvproduct='', --sqlserver不需要指定@provider='SQLOLEDB',5@datasrc='192.168.1.102' --要访问的服务器
  1. 登录链接服务器
EXEC sp_addlinkedsrvlogin 'DB1', --被访问的服务器别名'false', --useselfNULL, --locallogin'sa', --帐号 '123456' --密码

4.2 配置 Oracle dblink

请升级到5.1.4.86-preview02+

var db = new SqlSugarClient(new List<ConnectionConfig>()
{new ConnectionConfig(){ConfigId="A",DbType=DbType.SqlServer,ConnectionString=..,IsAutoCloseConnection=true  },new ConnectionConfig(){ConfigId="B",DbType=DbType.SqlServer,DbLinkName="@dblink_name",//配置dblink名字要@开头ConnectionString=..,IsAutoCloseConnection=true  }
});
//实体配置是哪个库
[Tenant("B")] //实体标为A表示是A库
public class OrderItem//联表查询要5.1.4.66+才支持
var list1 = db.QueryableWithAttr<Order>() //根根据ConfigId自动实现跨库.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId)  .ToList();
//生成Sql        
//Left join  OrderItem@dblink_name

下面是 Oracle 的例子

CREATE DATABASE LINK dblink_name
CONNECT TO target_usernameIDENTIFIED BY target_passwordUSING'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=target_host)(PORT=target_port))(CONNECT_DATA=(SERVICE_NAME=target_service_name)))';

4.3 配置 PgSql Pwd外部表

请升级到 5.1.4.86-preview02+

var db = new SqlSugarClient(new List<ConnectionConfig>()
{new ConnectionConfig(){ConfigId="A",DbType=DbType.SqlServer,ConnectionString=..,IsAutoCloseConnection=true  },new ConnectionConfig(){ConfigId="B",DbType=DbType.SqlServer,DbLinkName="remote_",//命名要以_结尾ConnectionString=..,IsAutoCloseConnection=true  }
});
//实体配置是哪个库
[Tenant("B")] //实体标为A表示是A库
public class OrderItem//联表查询要5.1.4.66+才支持
var list1 = db.QueryableWithAttr<Order>() //根根据ConfigId自动实现跨库.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId)  .ToList();
//生成Sql        
//Left join  remote_OrderItem

下面是 PgSql 的例子

首先,在源数据库中创建 postgres_fdw 扩展:

CREATE EXTENSION postgres_fdw;

在源数据库中创建外部服务器对象,指定目标数据库的连接信息:

CREATE SERVER target_serverFOREIGN DATA WRAPPER postgres_fdwOPTIONS (dbname 'targetdb', host 'targethost', port 'targetport');

在上面的示例中,target_server 是外部服务器的名称,你需要提供目标数据库的连接信息,如目标数据库的名称、主机和端口。

创建用户映射,将源数据库的用户映射到目标服务器的用户:


CREATE USER MAPPING FOR current_userSERVER target_serverOPTIONS (user 'targetuser', password 'targetpassword');

确保提供正确的目标服务器的用户名和密码。

创建外部表,在源数据库中创建一个外部表,该表将映射到目标数据库中的表:

CREATE FOREIGN TABLE IF NOT EXISTS remote_OrderItem (column1 INT,column2 TEXT,...
) SERVER target_server;

字段结构要一样才能同步

现在,你可以在源数据库中查询外部表,就像查询本地表一样:


SELECT * FROM remote_table;

请升级到5.1.4.86-preview02+

4.4 其他跨服务器联表

只要配置好 dblinkName 找表规则:

  1. 默认: dblinkName.[表名]

  2. dblinkName_ 结尾: dblinkName表名 (这个表名是没有转释符号的,像`` 、[]、 “” 我们称为转释符号)

  3. dblinkName@ 开头: [表名]@dblinkName

var list1 = db.QueryableWithAttr<Order>() //根根据ConfigId自动实现跨库.LeftJoin<OrderItem>((o,i)=> o.Id == i.OrderId)  .ToList();
//生成Sql        
//Left join  规则生成的表名

请升级到5.1.4.86-preview02+

五、跨库子查询

5.1 用ThenMapper实现

支持跨库的类型,只能用在 Select 对象填充

//跨库 
var mydb=db.GetConnection(1);
mydb.ThenMapper(root,item=>{...});

5.2 Subqueryable

请升级:5.1.4.107-preview11+

 db.Queryable<Order>().Select(it => new { x= SqlFunc.Subqueryable<OrderItem>().AsWithAttr().Select(s => s.OrderId)//生成表名规则看:4.4和3.3}).ToList();//也可以用AS("表名")SqlFunc.Subqueryable<Order>().AS("yyy.Order01").InnerJoin<OrderItem>((x,y)=>x.Id==y.OrderId, "yyy.OrderItem01").Select(x=>x.Id)

5.3 嵌套查询或者Unionall

 //强制名库+表名一般在嵌套或者unionall不能切换库中用
var q=db.Queryable<Order>().AsWithAttr().Where(it=>it.Id>10);
var  q2=db.Queryable<Order>().AsWithAttr().Where(it=>it.Id<2);
db.UnionAll(q,q2).ToList();
//下面用于嵌套查询或者union all

六、.NET开源 ORM 框架 SqlSugar 系列🪭🪭🪭

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET开源 ORM 框架 SqlSugar 系列
  11. 【分组去重】.NET开源 ORM 框架 SqlSugar 系列
  12. 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  13. 【导航查询】.NET开源 ORM 框架 SqlSugar 系列
  14. 【子查询】.NET开源 ORM 框架 SqlSugar 系列
  15. 【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
  16. 【配置查询】.NET开源 ORM 框架 SqlSugar 系列
  17. 【并集查询】.NET开源 ORM 框架 SqlSugar 系列
  18. 【树型查询】.NET开源 ORM 框架 SqlSugar 系列
  19. 【表格查询】.NET开源 ORM 框架 SqlSugar 系列
  20. 【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
  21. 【查询函数】.NET开源ORM框架 SqlSugar 系列
  22. 【过滤器】.NET开源 ORM 框架 SqlSugar 系列
  23. 【跨库查询、多库查询】.NET开源 ORM 框架 SqlSugar 系列
  24. 【分页查询】.NET开源 ORM 框架 SqlSugar 系列

在这里插入图片描述

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

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

相关文章

数据可视化大屏UI组件库:B端科技感素材PSD

在数据可视化领域&#xff0c;一个出色的大屏UI设计不仅能够准确传达数据背后的信息&#xff0c;更能提升用户的视觉体验。然而&#xff0c;对于UI设计师而言&#xff0c;设计这样一款界面往往面临着寻找合适设计素材的挑战。为了应对这一难题&#xff0c;我们推出了这款数据可…

QT数据库(四):QSqlRelationalTableModel 类

关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段&#xff0c;标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段&#xff0c;例如 studInfo 数据表中的 studID 字段。外键字段是与其…

人工智能原理实验四:智能算法与机器学习

一、实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程&#xff0c;通过实验&#xff0c;帮助学生更好地掌握人工智能相关概念、技术、原理、应用等&#xff1b;通过实验提高学生编写实验报告、总结实验结果的能力&#xff1b;使学生对智能程序、智能算法等…

免费生成AI PPT产品推荐?

要完全免费几乎是没有的&#xff0c;要知道AI还是非常烧钱的。 不过免费蹭还是有很多方法的&#xff0c;这里收集了一些&#xff1a; 下面分享我自己免费蹭过的几款AI制作PPT的工具。 1 金山-WPS PPT对我们来说并不陌生&#xff0c;而微软的PowerPoint与金山的WPS也是我们最常…

WPF 消息循环(二)

们已经知道&#xff0c;win32/MFC/WinForm/WPF 都依靠消息循环驱动&#xff0c;让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher &#xff0c;哪里来的消息循环&#xff1f; WPF 启动运行堆栈&#xff1a; > WpfApp1.…

PostgreSQL 常用运维SQL整理

一、查询并杀会话 -- 查询会话 select pid,usename,client_addr,client_port,query_start,query,wait_event from pg_stat_activity; -- 杀会话 select pg_terminate_backend(pid号); -- 使用如下命令自动生成杀会话语句 select datid,datname,pid,usesysid,usename,applicat…

JS中的Promise用法大全

目录 一、相关概念介绍1.什么是Promise2.Promise状态3.创建Promise4.then()方法5.catch方法6.链式调用7.异步编程 二、使用1.构造Promise2.executor 函数3.then() 方法4.then() 方法返回的Promise的状态 三、Async/Await语法糖四、Promise应用场景五、总结 一、相关概念介绍 1…

【新界面】基于卷积神经网络的垃圾分类(Matlab)

基于CNN的垃圾识别与分类GUI【新界面】 有需要可直接联系我&#xff0c;基本都在在线&#xff0c;能秒回&#xff01;可加我看演示视频&#xff0c;不懂可以远程教学 1.此项目设计包括两份完整的源代码&#xff0c;有GUI界面的代码和无GUI界面系统的代码。 &#xff08;以下部…

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 这里不支持批处理 Python version…

bugku-simple MQTT-wp解析

1.下载题目打开题目&#xff0c;是一个流量包&#xff0c;题目说是MQTT&#xff0c;然后打开流量之后的流量都是MQTT&#xff0c;我们来搜一下MQTT是什么流量 MQTT流量&#xff1a; 是一种基于发布订阅模式的轻量级的通讯协议&#xff0c;并且该协议构建于TCP/IP协议之上&…

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…

Windows 与 Linux 下 Ping IPv6 地址 | 常用网络命令

注&#xff1a;本文为网络命令相关文章合辑。 未整理去重。 一、IPv6 概述 IPv6 即 “Internet 协议版本 6”&#xff0c;因 IPv4 地址资源面临耗尽问题而被引入以替代 IPv4。IPv6 则提供了理论上多达 2 128 2^{128} 2128 个地址&#xff0c;有效解决地址不足困境。 IPv6 具…

关卡选择与布局器

unity布局管理器 使用unity布局管理器轻松对关卡选择进行布局。 实现过程 准备普通按钮button设置字体和对应的sprite设置父gameobject&#xff08;levelbase&#xff09; 再创建UI.image&#xff08;selectbackground&#xff09;布局背景和大小gameobject&#xff08;grid…

python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入

【1】引言 前序学习过程中&#xff0c;我们偶然发现&#xff1a;如果原始图像是png格式&#xff0c;将其从BGR转向HSV&#xff0c;再从HSV转回BGR后&#xff0c;图像的效果要好于JPG格式。 文章链接为&#xff1a; python学opencv|读取图像&#xff08;十二&#xff09;BGR图…

程序算术题-2

程序算术题-2 输出所有组合逻辑实例代码 输出所有排列逻辑实例代码 输出所有组合 计算一组数字按n位数组合的所有组合。 逻辑 /*** param stringBuilder 用于组合的拼接* param list 组合数序列* param level 目前位数* param exceptedLevel 组合期待位数*/…

VQ-VAE和VAE 的区别是什么?

第一行所展示的就是普通的VAE,它的核心是通过encoder和decoder&#xff0c;将像素空间的图像压缩到一个提取了核心特征的隐变量向量。VQ-VAE的思想是&#xff0c;即使VAE中压缩的这个隐变量中的向量提取了图片中的核心特征信息&#xff0c;但是这些信息仍然可能存在冗余&#x…

使用Qt Creator设计可视化窗体(一)

一、创建项目 打开 Qt Creator &#xff0c;在菜单栏中选中&#xff1a; “文件” --------> “新建文件或项目” &#xff1b;或者使用快捷键&#xff1a;Ctrl n&#xff1b;或者直接点击&#xff1a;“new” Qt 中的构建工具有三种可供选择&#xff0c;分别是&#…

Python3 爬虫 Scrapy 与 Redis

Scrapy是一个分布式爬虫的框架&#xff0c;如果把它像普通的爬虫一样单机运行&#xff0c;它的优势将不会被体现出来。因此&#xff0c;要让Scrapy往分布式爬虫方向发展&#xff0c;就需要学习Scrapy与Redis的结合使用。Redis在Scrapy的爬虫中作为一个队列存在。 一、Scrapy_r…

Docker 学习

Docker 学习 Docker 概念 Docker 安装 一般是在服务器里 Docker阿里云镜像加速 配置主要是Linux命令 Docker命令大纲及帮助文档的使用 docker帮助文档 查看docker命令 docker --help查看某个命令&#xff0c;例如ps的详细文档 docker ps --help也可查阅 [docker官方帮助手…

超牛免费 机械臂模型、工业机器人模型下载网站集合

‌机械臂是一种高精度、多输入多输出的复杂系统&#xff0c;能够模仿人手的动作&#xff0c;按照给定程序、轨迹和要求实现自动抓取、搬运等功能‌。它通常由执行机构、驱动装置、控制系统以及传感器等组成&#xff0c;能够完成各种复杂的动作。‌ 机械臂在工业、医学、娱乐、…