《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx

上传人(卖家):momomo 文档编号:5818444 上传时间:2023-05-11 格式:PPTX 页数:44 大小:921.70KB
下载 相关 举报
《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx_第1页
第1页 / 共44页
《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx_第2页
第2页 / 共44页
《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx_第3页
第3页 / 共44页
《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx_第4页
第4页 / 共44页
《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、目录目录概述概述1基于基于PythonPython访问访问Neo4jNeo4j2基于基于PythonPython访问访问MongoDBMongoDB3基于基于PythonPython访问访问RedisRedis4小结小结61基于基于PythonPython访问访问CassandraCassandra510.1 概述概述 NoSQLNoSQL数据库管理系统在大数据库生态应用系统架构数据库管理系统在大数据库生态应用系统架构存储层中起着重要的存储层中起着重要的作用作用 本章内容本章内容思维导图思维导图2 不同类型不同类型的应用系统可采用的开发语言的应用系统可采用的开发语言 JavaJava Pyth

2、onPython C C+、C#C#ScalaScala GoGo RubyRuby PerlPerl等等 各种数据库各种数据库一般都支持多种程序语言的编程一般都支持多种程序语言的编程接接口,为应用系统数据存储处理编程方面提供了口,为应用系统数据存储处理编程方面提供了丰富的丰富的APIAPI和接入技术。和接入技术。310.1 概述概述 JAVAJAVA访问数据库的技术访问数据库的技术 JDBCJDBC 引入相关依赖引入相关依赖JARJAR包到工程中;包到工程中;创建链接;创建链接;开启会话;开启会话;数据操作;数据操作;关闭关闭会话;会话;如果数据库支持事务,也可进行事务的提交、回如果数据库支

3、持事务,也可进行事务的提交、回滚等操作;滚等操作;其他持久化中间件产品,常用的有:其他持久化中间件产品,常用的有:Hibernate-OGMHibernate-OGM(Object Grid MappingObject Grid Mapping)MyBatisMyBatis SpringDataSpringData410.1 概述概述 JavaJava访问访问4 4类类NoSQLNoSQL数据库依赖数据库依赖的的JarJar包包 1 1)Neo4jNeo4j图图数据库数据库 https:/ 概述概述 JavaJava访问访问4 4类类NoSQLNoSQL数据库依赖的数据库依赖的JarJar包(

4、续)包(续)2 2)MongoDBMongoDB文档文档数据库数据库 官方官方提供的驱动文件为提供的驱动文件为mongo-java-driver.jarmongo-java-driver.jar,当前版本,当前版本为为4.1.04.1.0,下载链接:下载链接:http:/mongodb.github.io/mongo-java-driver/http:/mongodb.github.io/mongo-java-driver/。3 3)RedisRedis键值键值数据库数据库 jedisjedis是是RedisRedis的的javajava版本客户端实现,开发需要的版本客户端实现,开发需要的Ja

5、rJar包为包为jedis.jarjedis.jar,目前版本为,目前版本为3.33.3。下载链接:下载链接:httpshttps:/ 概述概述 JavaJava访问访问4 4类类NoSQLNoSQL数据库依赖的数据库依赖的JarJar包(续)包(续)4 4)CassandraCassandra列族列族数据库数据库 DatastaxDatastax公司提供了公司提供了JavaJava访问访问CassandraCassandra的驱动库的驱动库包。包。官方链接:官方链接:httpshttps:/ JPA(Java Persistence API)JPA(Java Persistence API)

6、意即意即JavaJava持久化持久化APIAPI JPAJPA出现出现主要是为了简化持久层开发以及整合主要是为了简化持久层开发以及整合ORMORM技术技术 JPAJPA包括以下包括以下3 3方面的方面的技术技术 ORMORM映射映射元数据,元数据元数据,元数据描述对象和表之间的映射描述对象和表之间的映射关系关系 APIAPI:操作实体对象来执行操作实体对象来执行CRUDCRUD操作操作 查询语言查询语言:通过面向对象而非面向数据库的通过面向对象而非面向数据库的查询语言查查询语言查询询数据,避免数据,避免程序与程序与SQLSQL语句紧密语句紧密耦合耦合710.1 概述概述 基于基于Spring

7、Spring Boot2.0Boot2.0的的Java WebJava Web应用开发技术栈应用开发技术栈810.1 概述概述 Spring DataSpring Data 官网:官网:httpshttps:/:/spring.io/projects/spring-dataspring.io/projects/spring-data 针对不同数据库提供了不同的开发模块针对不同数据库提供了不同的开发模块 Spring Data Neo4j Spring Data Neo4j Spring Spring Data Data MongoDBMongoDB Spring Data Spring Dat

8、a RedisRedis Spring Data for Apache Spring Data for Apache CassandraCassandra Spring Data Azure Cosmos Spring Data Azure Cosmos DBDB Spring Data Spring Data CouchbaseCouchbase Spring Data Spring Data ElasticsearchElasticsearch Spring Data JPASpring Data JPA 910.1 概述概述目录目录概述概述1基于基于PythonPython访问访问Neo

9、4jNeo4j2基于基于PythonPython访问访问MongoDBMongoDB3基于基于PythonPython访问访问RedisRedis4小结小结610基于基于PythonPython访问访问CassandraCassandra5P4.2 基于基于Python访问访问Neo4j 基于基于PythonPython访问访问Neo4j Neo4j 数据库主要通过数据库主要通过py2neopy2neo库,库,下载地址为下载地址为https:/py2neo.org/v4/https:/py2neo.org/v4/。V4V4版本语法与低版本有差异版本语法与低版本有差异 可以使用如下可以使用如下p

10、ippip命令安装最新稳定版本命令安装最新稳定版本。pip install py2neo Python3Python3下安装使用如下命令下安装使用如下命令 python3 python3 m pip install m pip install py2neopy2neo 过程有些过程有些长长11P4.2 基于基于Python访问访问Neo4j 引入包引入包 from from py2neo import Graph,Node,Relationshippy2neo import Graph,Node,Relationship#连接连接neo4jneo4j数据库数据库 graph=graph=Gra

11、ph(bolt:/localhost:7687,username=neo4j,passGraph(bolt:/localhost:7687,username=neo4j,password=word=buptyynbuptyyn)#新增节点新增节点 node1=Node(node1=Node(lablelable=Person,namePerson,name=张三张三)graph.creategraph.create(node1)(node1)node2=Node(node2=Node(lablelable=Person,namePerson,name=李四李四)graph.creategrap

12、h.create(node2)(node2)12P4.2 基于基于Python访问访问Neo4j 新增关系新增关系node_1_call_node_2=node_1_call_node_2=Relationship(node1,CALL,node2Relationship(node1,CALL,node2)#关系属性关系属性countcount值为值为1 1node_1_call_node_2count=1node_1_call_node_2count=1node_2_call_node_1=node_2_call_node_1=Relationship(node2,CALL,node1)Re

13、lationship(node2,CALL,node1)#创建关系创建关系graph.creategraph.create(node_2_call_node_1)(node_2_call_node_1)graph.creategraph.create(node_1_call_node_2)(node_1_call_node_2)13P4.2 基于基于Python访问访问Neo4j 同时新增节点及关系同时新增节点及关系 nicolenicole=Node(Person,name=Nicole)=Node(Person,name=Nicole)adamadam=Node(Person,name=A

14、dam)=Node(Person,name=Adam)graph.creategraph.create(Relationship(Relationship(nicolenicole,KNOWS,KNOWS,adamadam)14P4.2 基于基于Python访问访问Neo4j 修改节点、关系的属性值修改节点、关系的属性值#更新更新关系属性关系属性,pushpush提交提交node_1_call_node_2count+=1node_1_call_node_2count+=1graph.pushgraph.push(node_1_call_node_2)(node_1_call_node_2)#

15、更新更新节点节点属性属性,pushpush提交提交 node1age=20 node1age=20 node2age=25 node2age=25 graph.pushgraph.push(node1)(node1)graph.pushgraph.push(node2)(node2)15P4.2 基于基于Python访问访问Neo4j 查询查询 matcher=matcher=NodeMatcherNodeMatcher(graph)(graph)matcher.matchmatcher.match(Person,name=Keanu Reeves).first()(Person,name=K

16、eanu Reeves).first()(_22:Person born:1964,name:Keanu Reeves(_22:Person born:1964,name:Keanu Reeves)matcher.matchmatcher.match(name=(name=张三张三).first).first()()(_0 age:20,(_0 age:20,lablelable:Person,name:u5f20u4e09:Person,name:u5f20u4e09)graph.nodesgraph.nodes2222(_22:Person born:1964,name:Keanu Ree

17、ves)(_22:Person born:1964,name:Keanu Reeves)graph.nodes.getgraph.nodes.get(22)(22)(_22:Person born:1964,name:Keanu Reeves)(_22:Person born:1964,name:Keanu Reeves)16P4.2 基于基于Python访问访问Neo4j 删除删除节点节点 dntest=Node(Person,name=del-test dntest=Node(Person,name=del-test)graph.creategraph.create(dntestdntes

18、t)matcher.matchmatcher.match(Person,namePerson,name=del-test).first()=del-test).first()(_202:Person name:del-test(_202:Person name:del-test)id_20 id_20=graph.evaluategraph.evaluate(MATCH(n)where id(n)(MATCH(n)where id(n)=202 RETURN n=202 RETURN n)graph.deletegraph.delete(id_20)(id_20)17目录目录概述概述1基于基于

19、PythonPython访问访问Neo4jNeo4j2基于基于PythonPython访问访问MongoDBMongoDB3基于基于PythonPython访问访问RedisRedis4小结小结618基于基于PythonPython访问访问CassandraCassandra510.3 基于基于Python访问访问 MongoDBMongoDB MongoDBMongoDB支持很多种访问方式,参见支持很多种访问方式,参见https:/docs.MongoDB.com/ecosystem/drivershttps:/docs.MongoDB.com/ecosystem/drivers。基于。基于

20、PythonPython访问访问MongoDB MongoDB 数据库主要通过数据库主要通过pymongopymongo库库 下载地址下载地址httpshttps:/docs.MongoDB.com/ecosystem/drivers/python/:/docs.MongoDB.com/ecosystem/drivers/python/安装命令安装命令:pip install pip install pymongopymongo Python3Python3下安装:下安装:python3 m pip install python3 m pip install pymongopymongo19

21、课件中示例基于课件中示例基于python3.8python3.8 如果下载失败,也可以如果下载失败,也可以用以下代理用以下代理方式安装方式安装 pip install pip install pymongopymongo-i i http:/ 引入包引入包2010.3 基于基于Python访问访问 MongoDBMongoDB2110.3 基于基于Python访问访问MongoDB 链接数据库、查询某个集合所有行数据示例如下链接数据库、查询某个集合所有行数据示例如下 import import pymongopymongo from from pymongopymongo import imp

22、ort MongoClientMongoClient client=client=MongoClientMongoClient()()database=database=client.myTestclient.myTest collection=collection=database.ctdatabase.ct rows=rows=collection.findcollection.find()()for row in rows:print(row)for row in rows:print(row)链接数据的另外方法:链接数据的另外方法:#mongodbmongodb服务的地址和端口号服务的

23、地址和端口号mongo_urlmongo_url=127.0.0.1:27017“127.0.0.1:27017“#连接到连接到mongodbmongodb,如果参数不填,默认为,如果参数不填,默认为“localhost:27017”localhost:27017”client=client=pymongo.MongoClientpymongo.MongoClient(mongo_urlmongo_url)如果需要验证身份如果需要验证身份client client=pymongo.MongoClientpymongo.MongoClient(mongodbmongodb:/root:12345

24、6localhost:27017/):/root:123456localhost:27017/)#连接到数据库连接到数据库myDatabasemyDatabaseDATABASE=DATABASE=myDatabasemyDatabase dbdb=clientDATABASEclientDATABASE#连接到集合连接到集合(表表):):myDatabase.myCollectionmyDatabase.myCollectionCOLLECTION=COLLECTION=myCollectionmyCollection db_colldb_coll=dbdbCOLLECTION COLLEC

25、TION 10.3 基于基于Python访问访问 MongoDBMongoDB2310.3 基于基于Python访问访问MongoDB PythonPython访问访问MongoDBMongoDB,新增文档,语法非常类似,新增文档,语法非常类似 例如例如插入一个插入一个bLogbLog数据到数据到postsposts集合中。集合中。import import datetimedatetimepost=author:Mike,post=author:Mike,.text:My first.text:My first bLogbLog post!,post!,.tags:MongoDB,pytho

26、n,.tags:MongoDB,python,pymongopymongo,.date:.date:datetime.datetime.utcnowdatetime.datetime.utcnow()()posts=posts=db.postsdb.postspost_idpost_id=posts.insert_oneposts.insert_one(post).(post).inserted_idinserted_idprint(print(post_idpost_id)5f38ade676648d13f8a02fb55f38ade676648d13f8a02fb52410.3 基于基于P

27、ython访问访问MongoDB 查看当前数据库中所有集合的名称查看当前数据库中所有集合的名称。db.list_collection_namesdb.list_collection_names()()postsposts 使用使用find_onefind_one查看某一查看某一文档,文档,也支持也支持查询条件设置。查询条件设置。pprint.pprintpprint.pprint(posts.find_oneposts.find_one()()2510.3 基于基于Python访问访问MongoDB PythonPython访问访问MongoDBMongoDB,修改修改文档文档 可以增加可以增

28、加upsertupsert=True=True,表示如果没有该条数据则插入一,表示如果没有该条数据则插入一条数据,但这种情况需要插入语句也得包含其它字段,不条数据,但这种情况需要插入语句也得包含其它字段,不能只有要更新的字段信息;能只有要更新的字段信息;collection.update_onecollection.update_one(Name:(Name:wangwang,$set:gender:1,age:19,$set:gender:1,age:19,upsertupsert=True=True)2610.3 基于基于Python访问访问MongoDB 根据根据_id_id查询某个文档

29、操作对比查询某个文档操作对比 MongoDB shell:MongoDB shell:db.getCollectiondb.getCollection(pyuserpyuser).find(_id:).find(_id:ObjectIdObjectId(5ebd4601a94e93a0(5ebd4601a94e93a06cded0126cded012)PyMongoPyMongo:from from bsonbson import import ObjectIdObjectId collection.find_onecollection.find_one(_id:(_id:ObjectIdOb

30、jectId(5ebf8b8914bc01def442a80b)(5ebf8b8914bc01def442a80b)_id:_id:ObjectIdObjectId(5ebf8b8914bc01def442a80b),Name:(5ebf8b8914bc01def442a80b),Name:wangwang,age:19,gender:1age:19,gender:1 目录目录概述概述1基于基于PythonPython访问访问Neo4jNeo4j2基于基于PythonPython访问访问MongoDBMongoDB3基于基于PythonPython访问访问RedisRedis4小结小结627基

31、于基于PythonPython访问访问CassandraCassandra510.4 基于基于Python访问访问 RedisRedis 基于基于PythonPython访问访问RedisRedis数据库主要通过数据库主要通过redis-pyredis-py实现,实现,下载链接及相关文档参见下载链接及相关文档参见https:/ install pip install redisredis 如果同时安装了如果同时安装了python 2.7python 2.7和和3.x3.x版本,建议将其中版本,建议将其中一个一个python.exepython.exe名称修改下,区分开两个版本,如名称修改下,区

32、分开两个版本,如将将3.x3.x的的python.exe python.exe 命名为命名为python3.exepython3.exe2810.4 基于基于Python访问访问 RedisRedis 如果同时安装了两个版本的如果同时安装了两个版本的PythonPython,如果直接执行,如果直接执行pippip命令,将会把第三方库安装到先安装的命令,将会把第三方库安装到先安装的pythonpython版版本环境中;本环境中;在使用在使用pippip安装库时,可限定某个版本安装库时,可限定某个版本PythonPython的的pippip安装。命令格式:安装。命令格式:python3 m pip

33、 install python3 m pip install redisredis 课件中示例基于课件中示例基于python3.8python3.8 基于基于PythonPython访问访问 RedisRedis关键步骤关键步骤 引入相关库引入相关库 建立数据库链接建立数据库链接 访问数据库访问数据库 关闭数据库链接关闭数据库链接2910.4 基于基于Python访问访问 RedisRedis30 基于基于PythonPython访问访问RedisRedis数据库示例如下。数据库示例如下。import import redisredis r=r=redis.Redisredis.Redis(h

34、ost=localhost,port=6379,(host=localhost,port=6379,dbdb=0)=0)r.setr.set(foo,bar)(foo,bar)True True r.getr.get(foo)(foo)bar bar如果有密码,如下方式链接:如果有密码,如下方式链接:r r=redis.Redis(host=23.226.74.190,port=63279,password=redis.Redis(host=23.226.74.190,port=63279,password=19196 6789789)基于基于PythonPython访问访问 RedisRed

35、is,循环查询当前键列表,循环查询当前键列表 示例示例 import import redisredis r=r=redis.Redisredis.Redis()()print(print(client.keysclient.keys()()for key in for key in client.keysclient.keys()():print(:print(key.decodekey.decode()()3110.4 基于基于Python访问访问 RedisRedis client.keysclient.keys()()返回的是一个列表,列表返回的是一个列表,列表里是里是bytesbyt

36、es型型keykey,使用,使用forfor循环把列表元循环把列表元素转换为素转换为pythonpython中的字符串型数据,中的字符串型数据,循环输出。循环输出。10.4 基于基于Python访问访问 RedisRedis client.setclient.set(pykeypykey,hello!,hello!,nxnx=True=True)client.setclient.set(count,10)(count,10)TrueTrue client.incrclient.incr(count)(count)1111 client.incrclient.incr(count,(count,

37、5 5)1616 client.decrclient.decr(count,count,5 5)1111 client.decrclient.decr(count)(count)1010 client.expireclient.expire(count,10)(count,10)TrueTrue32 nxnx=True=True表示键不存在时执行;表示键不存在时执行;client.incrclient.incr实现给第实现给第1 1个参数键个参数键增加一个增量,如果省略第增加一个增量,如果省略第二个参数则表示加二个参数则表示加1 1;client.decrclient.decr实现实现给第给第

38、1 1个参数个参数键键减少减少一个量一个量,如果省略第二,如果省略第二个参数则个参数则表示减表示减1 1;client.expireclient.expire用于设置键的用于设置键的ttlttl;目录目录概述概述1基于基于PythonPython访问访问Neo4jNeo4j2基于基于PythonPython访问访问MongoDBMongoDB3基于基于PythonPython访问访问RedisRedis4小结小结633基于基于PythonPython访问访问CassandraCassandra510.5 基于基于Python访问访问Cassandra 需要安装驱动需要安装驱动cassandra

39、cassandra-driver-driver,下载链接及相关文,下载链接及相关文档档参见参见 httpshttps:/pypi.org/project/cassandra-driver:/pypi.org/project/cassandra-driver/该驱动组件由该驱动组件由DATASTAXDATASTAX公司开发,并托管到公司开发,并托管到GithubGithub上,开源免费,可以采用上,开源免费,可以采用pippip方式进行安装方式进行安装。pip pip install install cassandracassandra-driver-driver 或者或者 python3 m

40、pip install python3 m pip install cassandracassandra-driver-driver 关键步骤关键步骤 引入相关库引入相关库 建立数据库链接建立数据库链接 访问数据库访问数据库 关闭数据库链接关闭数据库链接3410.5 基于基于Python访问访问Cassandra 1 1)引入相关库,建立连接,创建会话。)引入相关库,建立连接,创建会话。from from cassandra.clustercassandra.cluster import Cluster import Clustercluster=Cluster(192.168.209.180

41、)cluster=Cluster(192.168.209.180)cluster.portcluster.port=9042=9042session=session=cluster.connectcluster.connect()()session=session=cluster.connectcluster.connect(test_cassandratest_cassandra)操作完毕后,可以通过以下方式关闭数据库连接。操作完毕后,可以通过以下方式关闭数据库连接。cluster.shutdowncluster.shutdown()()由于由于CassandraCassandra在分布式部

42、署时采用对等的环形结在分布式部署时采用对等的环形结构,因此构,因此IPIP参数支持逗号隔开的地址列表。参数支持逗号隔开的地址列表。3510.5 基于基于Python访问访问Cassandra 2 2)连接到某个键空间,有两种方法:)连接到某个键空间,有两种方法:session=session=cluster.connectcluster.connect(test_cassandratest_cassandra)或者或者session.executesession.execute(use(use test_cassandratest_cassandra)3 3)执行)执行CQLCQL语句。示例语

43、句。示例CQLCQL语句如下。语句如下。session.executesession.execute(insert into users(id,name)values(1,Zhang);)(insert into users(id,name)values(1,Zhang);)session.executesession.execute(insert into users(id,name)values(2,Wang);)(insert into users(id,name)values(2,Wang);)rows=rows=session.executesession.execute(selec

44、t(select*from users from users;);)for for r in rows:r in rows:print(r print(r)session.executesession.execute(delete from users where id=2;)(delete from users where id=2;)3610.5 基于基于Python访问访问Cassandra 当通过当通过session.executesession.execute执行查询语句时,可以采用执行查询语句时,可以采用三种方式遍历返回的结果,示例如下三种方式遍历返回的结果,示例如下。37rows

45、=rows=session.executesession.execute(SELECT id,name FROM users)(SELECT id,name FROM users)for row in rows:for row in rows:print(row.id,row.name)print(row.id,row.name)for(id,name)in rows:for(id,name)in rows:print(id,name)print(id,name)for row in rows:for row in rows:print(row0,row1)print(row0,row1)10

46、.5 基于基于Python访问访问Cassandra 示例:用示例:用PythonPython链接该键空间并进行数据访问链接该键空间并进行数据访问 先建立以下键空间、先建立以下键空间、usersusers表表CREATE CREATE KeyspaceKeyspace test_cassandratest_cassandraWITH replication=class:WITH replication=class:SimpleStrategySimpleStrategy,replication_factorreplication_factor:3;:3;use use test_cassand

47、ratest_cassandra;CREATE TABLE users(CREATE TABLE users(id id intint,name text,name text,age age tinyinttinyint,PRIMARY KEY(id)PRIMARY KEY(id););3810.5 基于基于Python访问访问Cassandra 示例示例#-*-encoding:utf-8-encoding:utf-8-*-#引入引入ClusterCluster模块模块from from cassandra.clustercassandra.cluster import Cluster im

48、port Cluster#引入引入DCAwareRoundRobinPolicyDCAwareRoundRobinPolicy模块,可用来自定义驱动程模块,可用来自定义驱动程序的行为序的行为from from cassandra.policiescassandra.policies import import DCAwareRoundRobinPolicyDCAwareRoundRobinPolicy#默认本机数据库集群默认本机数据库集群(IP127.0.0.1).(IP127.0.0.1).cluster=Cluster()cluster=Cluster()#连接并创建一个会话连接并创建一个

49、会话session=session=cluster.connectcluster.connect()()3910.5 基于基于Python访问访问Cassandra Python3.8/2.7 shellPython3.8/2.7 shell中执行效果示例中执行效果示例#查看是否关闭连接查看是否关闭连接print(print(cluster.is_shutdowncluster.is_shutdown)#插入数据插入数据session.executesession.execute(insert into users(id,name)values(1,Zhang);)(insert into u

50、sers(id,name)values(1,Zhang);)session.executesession.execute(insert into users(id,name)values(2,Wang);)(insert into users(id,name)values(2,Wang);)4010.5 基于基于Python访问访问Cassandra#查询查询数据数据rows=rows=session.executesession.execute(select(select*from users;)from users;)for r in rows:for r in rows:print(r

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《NOSQL数据库技术》课件第10章-NoSQL数据库访问技术.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|