图数据库初探

您所在的位置:网站首页 mysql导入数据库 图数据库初探

图数据库初探

2023-11-28 04:33| 来源: 网络整理| 查看: 265

文章目录 1. 新建一个图数据库并设置为启动项1.1 Desktop操作1.2 命令行操作 2. 将MySQL数据库中的数据导入2.1 现有的MySQL中的关系数据库2.2 使用Desktop中的ETL Tool进行导入2.3 关系数据库转为图数据库的规则 3. 问题解决1. Connection failed. SQL state:08001,message:Could not create connection to database server2. Mapping Error3. 确认可导入的数据格式4. Importing Data in Neo4j through ETL Tool failed due to error warning4.1 💢💢(无效)修改文件中的路径斜杠4.2 💢💢(无效)修改java版本4.3 💢💢研究neo4j-admin-import-params文件4.4 ✅✅修改,然后直接执行中断错误的命令4.5 结论✅✅ 5. 用一下自己导入的这个数据库5.1. 验证数据量5.2. 中文乱码5.3. 简单使用 参考

1. 新建一个图数据库并设置为启动项 1.1 Desktop操作

由于我使用的是桌面版(Desktop),所以直接在界面上点点就可以了 在这里插入图片描述

必须先启动自己在Project创建的DBMS,然后才会显示当前这个DBMS下的数据库,同时才有进行其他操作的空间

点击Create database,比如我就创建了一个叫mysql的数据库,作为存放从mysql转过来的数据

然后需要将新建的这个数据库设置为(default)默认启动数据库,然后才可以使用命令行工具——neo4j bloom(浏览器UI命令行),然后才能做别的事情

点击这个DBMS的Settings, 在这里插入图片描述 在这里插入图片描述

把默认数据库那项,改成自己刚刚新建的那个数据库名称,前面的注释去掉。

改好之后,点击Apply,然后会提示重启这个DBMS,就重启等着好了 在这里插入图片描述

然后可以看到default这个关键词就跑到刚刚新创建的mysql数据库后面了,虽然右侧mysql数据库没有任何介绍,是个空壳子数据库。在这里插入图片描述

另外,指定了mysql是default之后,启动neo4j的browser命令行,其命令行前缀就是这个数据库 在这里插入图片描述

1.2 命令行操作

参考: Managing Multiple Databases in Neo4j(在neo4j中管理多个数据库)

其实也可以不在启动的时候就指定数据库的。

逐步输入以下命令:

查看当前这个DBMS下有多少数据库,使用:dbs。可以看到,只有两个默认的,一个就是system,另一个就是neo4j(默认的) 在这里插入图片描述 另外,可以观察一下这些命令的前缀 在这里插入图片描述

创建一个新的数据库,使用create database mysql,再看看,:dbs的输出,其实就可以看到

Creating a new database (Enterprise only),创建数据集这个功能只有企业版才有。。桌面版其实有一部分功能是企业版的,所以桌面版只有一年的试用期。所以正常来说,一个DBMS只有一个默认数据库neo4j可以使用。。。

在这里插入图片描述

切换到新建的数据库进行使用,use mysql,提示已经更新了Neo4j的DBMS的数据库已经更新了,从这个语句之后的查询语句都是针对mysql数据库进行的了。(命令行前缀已经变成mysql了) 在这里插入图片描述4. 可以回到Desktop重启一下这个DBMS,就可以看到刚刚使用命令行创建的mysql了,虽然并不是default,但是无所谓。 在这里插入图片描述

2. 将MySQL数据库中的数据导入 2.1 现有的MySQL中的关系数据库

感谢:基于知识图谱的问答系统(KBQA),本示例使用的数据库来自这位大公无私的大神博主。数据库如下: 在这里插入图片描述

2.2 使用Desktop中的ETL Tool进行导入

参考:https://neo4j.com/developer/neo4j-etl/以及https://neo4j.com/labs/etl-tool/1.5.0/

neo4j-ETL 这个工具就是neo4j提供的专门用于数据的工具

启动Neo4j ETL Tool(这个东西和DBMS的启动无关。。。这几个工具都可以单独启动) 在这里插入图片描述

选择一个Project(注意,这个还是企业版的功能,桌面版只是有部分企业版功能,而且桌面版只可以用一年。。。但是只要数据库构建好了,这个工具其实就可以去用社区版维护一个数据库就好了。。。😶😶😶)

另外,导入时是不能指定导入到neo4j中的哪个数据库中,只能是选择DBMS,然后新建一个图数据库导进去。 在这里插入图片描述

点击上面的ADD CONNECTION,填写一些必要的信息。

红框部分是默认的配置,Database名称改了之后,下面URL中也会自动修改的。如果不了解JDBC的话(这是java连接数据库的方式,可以参考菜鸟教程-Java MySQL 连接)。用户密码就是mysql的用户密码,一般是root用户,密码自己好好想想,想不起来就只能重置,重置参考mysql官方文档,或者是类似外国的菜鸟教程:How to Reset MySQL Root Password in Windows using cmd?Host和Port就是安装时候显示的,一般mysql的端口就是3306 在这里插入图片描述 database就是要连接到mysql中哪个数据库

在这里插入图片描述

点击TEST AND SAVE CONNECTION,报错 在这里插入图片描述 如果报错,直接在上面的Connection URL链接中加入:&serverTimezone=UTC(直接复制到最后面就可以。)。详情见 3. 问题解决->1.XXX部分

如果测试连接正确,就会看到下面这个提示,创建连接成功。完整的提示信息为:Connection mysql2neo4j saved. Connection successful. Catalog: poem_kbqa_demo, Schema: null,这里有一点要注意,Schema是NULL

有了mysql数据库和neo4j数据库之间的连接,接下来其实就可以开始映射了,START MAPPING 在这里插入图片描述 折腾了很久,发现这个错误其实是个乌龙。。。 在这里插入图片描述

只是因为我没有选择刚刚创建的那个mysql2neo4j的连接(那个框框,从浅灰变成深灰,就是选中了),另外,None变成mysql2neo4j。两个框都要选,官方文档Choose the ‘From’ and ‘To’ Databases for Import图就很明确,认真看!!!! 有兴趣的可以看看logs,或者复制下来,防止之后出错。。

💢💢💢乌龙 错误解决详情参见 3.问题解决->2.XXXX部分。

映射成功之后,点击NEXT,就会看到从mysql中导入的表了。 在这里插入图片描述 但是这里有个问题,导入的这个MySQL数据库中的表,格式和neo4j默认的有些出入。默认所有的表都是节点,而没有关系。。。 参考2.4 关系数据库转为图数据库的规则以及3.问题解决中3.确认可导入的数据格式,重新修改mysql数据库的数据模式。 mysql数据不符合外键约束,所以就直接只导入实体,关系。。稍后使用python等语言,逐句添加。。。哎😪😪😪

就先只映射节点好了 这里我导入的时候,Import Mode默认只有一种选择,Bulk Import 关于导入的图数据库名称,要么使用默认的,要么自己指定一个名字。 在这里插入图片描述

上一步报错,参考 3. 问题解决中->4. Importing Data in Neo4j through ETL Tool failed due to error warning。 在这里插入图片描述 由于解决是使用命令行,所以。。其实和这部分界面控制是脱节的。还好这步就是最后一步。

另外,其实文档中也提示了,如果这步出错,可以使用命令行: 在这里插入图片描述

2.3 关系数据库转为图数据库的规则

参考:Review data model transformation and make adjustments ,翻译大意如下:

查看数据模型转换并进行调整

这里实际上是将关系数据转换为图形数据的地方,使用三个规则将关系数据库转换为图形数据库。

带有外键的表被视为连接并作为具有关系的节点导入 对于Person表来说,其主键是person_id,其包含一个属性,address_id,这个属性刚好是Address表的主键,所以对于Person表来说,address_id就是外键。。 在这里插入图片描述具有 2 个外键的表被视为连接表并作为关系导入。 对于Student_Course这个表来说,它包含了两个外键,分别是Course的主键course_id和Student的主键student_id。所以Student_Course刚好是这两个表的桥梁,所以真正有关系的其实是Course和Student这两个表 在这里插入图片描述外键 >2 的表被视为 n 个中间节点,并作为具有多个关系的节点导入 Orders表包含其他四个表的主键,一共有4个外键,这时候,就是多个关系的节点。 在这里插入图片描述 3. 问题解决 1. Connection failed. SQL state:08001,message:Could not create connection to database server

在这里插入图片描述 查看日志,观察错误详细信息。就很尴尬,没有关于这个ETL插件的log。

感谢:ETL mysql Connection failed. SQL state 08001. How to find my JDBC driver?

解决方法就是,在上面的Connection URL链接中加入:&serverTimezone=UTC(直接复制到最后面就可以。)

给的经验就是,可以尝试先用其他的工具链接一下,看看使用这样的url链接会报啥错,这个neo4j ETL工具不给具体的错误信息,就很恶心(但是这个错误信息是mysql端的,它确实也获取不到。。只能返回mysql给返回的信息,无解🤐🤐🤐)。

其实这个问题,和CSDN博客:idea连接MySQL数据库报错:[08001] Could not create connection to database server. Attempted reconnect 3 times是一样的,都是时区设置问题

2. Mapping Error

在这里插入图片描述 很好,继续报错,不过这次有SEE LOGS,可以看到详细的报错信息。

COMMAND: java -cp "C:\shaiic_work\neo4j_data\graphApps\_global\neo4j-etl-ui/dist/neo4j-etl.jar" org.neo4j.etl.NeoIntegrationCli generate-metadata-mapping --rdbms:url "" --rdbms:password "undefined" --rdbms:user "undefined" --output-mapping-file "C:\Users\HUANGS~1\AppData\Local\Temp/undefined_undefined_mapping.json" - Skipping reading import options from file because file [] doesn't exist. - Creating RDBMS to CSV mappings... - There is no suitable driver for the connection URL: - Command failed due to error (ClassNotFoundException: There is no suitable driver for the connection URL: ). Rerun with --debug flag for detailed diagnostic information.

最关键的一句, There is no suitable driver for the connection URL。我以为是缺少驱动。。

但是在:Neo4j ETL Docs/Neo4j ETL User Guide中,有一句很关键的话:

The drivers for MySQL and PostgreSQL are bundled with the Neo4j-ETL tool. 意思就是,Neo4j-ETL工具里默认已经集成了MySQL和PostgreSQL的驱动了,所以不是驱动的问题。

在这里插入图片描述 后来误打误撞,点击一下刚刚配置的mysql2neo4j连接,对比下面,其实是因为我自己没有选择好connection。RLG😡😡😡😡😡😡 在这里插入图片描述

💢💢💢💢都是乌龙

参考: Neo4j: 迁移MySQL的数据到Neo4j和菜鸟教程-Java MySQL 连接,

如果要使用JDBC连接mysql,第一件事就是下载JDBC驱动。把mysql-connector-java-8.0.11.jar复制到Neo4j安装目录中的plugins子目录下,重启Neo4jcp mysql-connector-java-8.0.11.jar $NEO4J_INSTALL_PATH/plugins

不过我这个是neo4j desktop版本。。。 第一步,下载那个jdbc driver

这个JDBC驱动似乎和MySQL版本有点关系。。可以在命令行中输入mysql --version,可以看到,自己的mysql版本号,挺新的。mysql5.0以上就直接下最新版本的驱动就可以。 在这里插入图片描述

感谢 Neo4j: 迁移MySQL的数据到Neo4j中提供的下载链接 在这里插入图片描述

直接把上面的版本号改成自己想要的就可以,类似:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.27.zip

如果使用下面这个网页下载(集成下载,一次把mysql所有的东西都下下来)。。还要注册登录,注意避坑 在这里插入图片描述 第二步,把jar包放到合适的位置

解压完之后有很多文件,只需要jar包就行,其他不用管

那个博主用的是neo4j社区版本,直接放在neo4j安装目录下的plugins插件目录下,我找了一下,桌面版没有。。。

参考:

Stack Overflow:No suitable driver found for jdbc Neo4j

有直接包含了jdbc依赖的neo4j包,来自于neo4j github issue-Getting No suitable driver found for jdbc:neo4j://localhost:7474/ #36,但是对解决我的问题没啥用。

CSDN博客: neo4j Caused by:java.sql.SQLException:No suitable driver found for jdbc:neo4j:http:/127.0.0.1:7474/ 或neo4j官方社区:Connecting to neo4j using java 3. 确认可导入的数据格式

在mapping之后,发现自己的这个mysql数据集导入之后,只有节点,没有关系(边)。

查看示例数据库,NorthWind的形式,github地址:https://github.com/pthom/northwind_psql参考2.4 关系数据库转为图数据库的规则

对于我目前的数据来说,其实只要把代表关系的那两个表,设置对应的外键即可。

在navicat里点点就可以了,设计表,加一下外键。 在这里插入图片描述 看看ER图,对比一下NorthWind和三个转换规则,就差不多了。 复习一下,MySQL里有一点 一个表的某个属性既可以是这个表的主键,也可以是外键!

在这里插入图片描述

但是mapping的时候报错了。。。所以neo4j转换的时候,不接受mysql一个表中一个属性既是主键,又是外键。。所以还是改改。

记录一下用到的sql语句(记得要加分号。。。)

# 查询某个表中的约束 SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where table_name="poem";

在这里插入图片描述

# 查看当前含有的数据库 show databases;

在这里插入图片描述

# 切换数据库 use poem_kbqa_demo;

在这里插入图片描述

# 删除某个表中的约束 alter table poet drop constraint poem_ibfk_1; # 如果是外键约束,则需要直接使用如下 alter table poet drop foreign key poem_ibfk_1;

在这里插入图片描述 报错: 在这里插入图片描述 这个问题比较复杂,参考另一个博客:mysql 1452 Cannot add or update a child row: a foreign key constraint fails

4. Importing Data in Neo4j through ETL Tool failed due to error warning

完整的错误信息:

COMMAND: java -cp "C:\shaiic_work\neo4j_data\graphApps\_global\neo4j-etl-ui/dist/neo4j-etl.jar" org.neo4j.etl.NeoIntegrationCli export --mapping-file "C:\Users\HUANGS~1\AppData\Local\Temp/mysql_poem_kbqa_demo_poem_kbqa_demo_mapping.json" --destination "C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e/data/databases/graph.db/" --import-tool "C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e/bin" --rdbms:password "XX" --rdbms:user "XXXX" --rdbms:url "jdbc:mysql://localhost:3306/poem_kbqa_demo?autoReconnect=true&useSSL=false&useCursorFetch=true&allowPublicKeyRetrieval=true&serverTimezone=UTC" --csv-directory "C:\Users\HUANGS~1\AppData\Local\Temp" --options-file "C:\Users\HUANGS~1\AppData\Local\Temp/import-tool-options.json" --using "bulk:neo4j-import" --neo4j:url "bolt://localhost:7687" --neo4j:user "XXX" --neo4j:password "XXX" --neo4j:db-auto-creation --force - Reading options from file C:\Users\HUANGS~1\AppData\Local\Temp\import-tool-options.json. - Reading metadata mapping from file: C:\Users\HUANGS~1\AppData\Local\Temp/mysql_poem_kbqa_demo_poem_kbqa_demo_mapping.json - Running ETL on Neo4j 4.3.5 - ENTERPRISE - Exporting from RDBMS to CSV... - CSV directory: C:\Users\yourname~1\AppData\Local\Temp\csv-002 - Writing CSV headers for node NODE_poemkbqademo.poem_629d5d8a-fe19-490a-8c36-cff14a7c8e25 - Writing CSV headers for node NODE_poemkbqademo.poet_af4dd1cb-83c9-4146-ad07-47c45a6a0d39 - Writing CSV headers for node NODE_poemkbqademo.verse_40715f90-ac78-4a5e-8ff0-e76a6caa2918 Export time: 0.278 (s) - Creating Neo4j store from CSV... - Direct driver instance 1765900922 created for server address localhost:7687 Unable to connect to Neo4j due to the following exception: Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it. - Importing data into Neo4j - Command failed due to error (CommandFailedException: Command failed [Command: 'C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e\bin\neo4j-admin.bat @C:\Users\HUANGS~1\AppData\Local\Temp\csv-002\neo4j-admin-import-params', CommandResult { ExitValue: 2, Stdout: 'Selecting JVM - Version:11.0.8, Name:OpenJDK 64-Bit Server VM, Vendor:Azul Systems, Inc.', Stderr: 'Invalid value for option '--report-file': cannot convert 'C:shaiic_work eo4j_data elate-datadbmssdbms-54e8721d-3337-412a-8b54-d6ccd03b564eimportimport.report' to interface java.nio.file.Path (java.nio.file.InvalidPathException: Illegal char at index 13: C:shaiic_work eo4j_data elate-datadbmssdbms-54e8721d-3337-412a-8b54-d6ccd03b564eimportimport.report)

仔细看上面的路径,问题很明显,由于转义符存在,所以真正执行的时候,路径错误。

类似的问题也有:Neo4j Desktop Can’t export database。可能还是推出时间不够长,很多功能还没有被验证过,所以这个bug还没修。

4.1 💢💢(无效)修改文件中的路径斜杠

查看执行ETL前读取的两个配置文件的内容,分别是:

C:\Users\yourname~1\AppData\Local\Temp\import-tool-options.json.{"multiline-fields":"true"} C:\Users\yourname~1\AppData\Local\Temp/mysql_poem_kbqa_demo_poem_kbqa_demo_mapping.json。这里面主要是一些转换模式,转过来neo4j图数据库的节点和边的定义出错那一步的上一步是: Creating Neo4j store from CSV...,在对应的csv2文件夹中,有一个文件:neo4j-admin-import-params,其内容是:import --report-file "C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e\import\import.report" --nodes "XXXXa6caa2918.csv" --delimiter , --array-delimiter ; --id-type STRING --ignore-empty-strings true --trim-strings true --multiline-fields true 所以对这里面的路径进行修改,全部改成/这种斜杠。无效,看来还是要改执行的命令。

在这里插入图片描述 直接把command中的斜杠全部改掉,运行,可以看到,报错信息是说我的Java版本不行。。。

即便在命令后面加上--debug,输出的错误信息其实都差不多。

4.2 💢💢(无效)修改java版本 警告: * Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j Server. * Please see https://neo4j.com/docs/ for Neo4j installation instructions.', Stderr: 'Invoke-Neo4jAdmin : This instance of Java is not supported

参考:

Please help me install Neo4j Community, Java 11 Doesn’t Seem to Be Properly Working . .

根据官方文档:System requirements 在这里插入图片描述 在这里插入图片描述 所以必须是Java的JDK11.。。。

另外,根据:Use Java Runtime 11 with Neo4J 3.5.x

neo4j从3.x版本到4.x版本最显著的一个区别就是,前者对应java jdk8,后者对应jdk 11。 在这里插入图片描述 同时,上面报错的地方,确实有这个neo4j-admin report工具,其依赖于java jdk 11。 在这里插入图片描述 好了,版本不行,重新安装吧。对不起,是我的版本太老了,我不配! 去这里下载11。安装好了记得改Java_Home等系统变量。

4.3 💢💢研究neo4j-admin-import-params文件

这个文件是每次执行的时候现场生成的,所以改没有用。 在这里插入图片描述 执行多少次,就会有多少个csv。

找到执行的命令, 在这里插入图片描述 虽然找到了。。但是不会改啊。

4.4 ✅✅修改,然后直接执行中断错误的命令

C:\Users\HUANGS~1\AppData\Local\Temp\csv-010\neo4j-admin-import-params把这个文件里,文件路径的斜杠,都换成/这个。

再执行:

C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e\bin\neo4j-admin.bat @C:\Users\HUANGS~1\AppData\Local\Temp\csv-010\neo4j-admin-import-params

在这里中断了,就直接改后面那个文件的斜杠,直接执行。然后就对了。。 在这里插入图片描述

4.5 结论✅✅ github上的issue也有,但是大部分,甚至是绝大部分都是linux上的!命令行操作的!偶尔能找到的neo4j desktop版本的都是neo4j社区上的问题,回答的人很少,和我一样有这个问题的人有好几个,但是没人回答。我的解决方案也是很low,大概知道在哪改,可惜看不懂windows下的批处理。(其实我找到需要修改的文件了,但是再深的内容就看不懂了)

综上,不建议使用desktop版本,也不建议在windows上使用neo4j。

如果是想使用desktop的,可以先使用server版本的,熟悉一下基本的命令和操作这样当desktop版本报错的时候,起码不至于慌张,而且有迹可循。

另外,可以从中看出neo4j的导入逻辑 从上面的输出信息其实可以看出来,neo4j从mysql中提取文件的时候,其实还是先把RDBMS数据转为csv文件,然后再以csv文件的形式导入。 在这里插入图片描述 和之前调研的说法一样,neo4j只支持csv导入。 同时从输出信息中,找到csv目录: 在这里插入图片描述 打开就可以看到转存的这个csv文件了 在这里插入图片描述

5. 用一下自己导入的这个数据库 5.1. 验证数据量

弄完了,回到界面,就可以看到: 在这里插入图片描述 只有节点,没有关系。

验证一下数量

MATCH (p:Poem) RETURN p # 可以看一下图的样子(默认看300个) # 另外,也可以直接统计数量 MATCH (p:Verse) RETURN count(p)

在这里插入图片描述

在这里插入图片描述 可以看到,这里还有个中文编码显示的问题。。。看来mysql那边导入的时候要十分注意。 在这里插入图片描述

mysql中,poem表839+poet表228+verse表10148=11215,数量并不完全对得上。检索之后,实际图数据库中poem839+poet228个+verse9987=11054,问题主要出在Verse表中。

怀疑是因为mysql中Verse(诗句),内容有重复的,去mysql里看看(其实都不用检索,肉眼都能看出来。。这个数据库质量真的不高!) 在这里插入图片描述

SELECT verse_content,count(verse_content) as count FROM verse GROUP BY verse_content HAVING count(verse_content) > 1 ORDER BY count DESC;

在这里插入图片描述 统计之后,重复了1353个,mysql中verse表是 10148-neo4j中是9987=161.。。。对不上,排除这个原因。

mysql中,poem表839+poet表228+verse表10148=11215,数量并不完全对得上。检索之后,实际图数据库中poem839+poet228个+verse9987=11054,

然后瞥了一眼旁边的介绍。。就很奇怪,有10148行,但是id递增只有9988(从1开始的)???但是拉到最后,最后一个序号是9987.。。。。就很迷??💢💢💢 在这里插入图片描述 那就是数据导入ok,没少。只是中文乱码这个问题要解决一下。

5.2. 中文乱码

参考:

neo4j etl工具导入中文数据出现乱码解决方案✅✅ neo4j导入中文的csv文件,出现乱码 desktop转换的csv文件一般存放位置:C:\Users\huangshan\AppData\Local\Temp\csv-010\poem_kbqa_demo把mysql转成的csv文件格式编码重新搞一下就可以了,但是不能再重新使用上面的导入了,要重新搞一个数据库才可以导入。算了,垃圾。

不要用桌面版!!!!直接用命令行!!!!不要用windows,用linux!!!!

5.3. 简单使用

参考:Managing Multiple Databases in Neo4j

查看现有的数据库:show databases切换到某个指定的数据库::use neo4j查看当前数据库的schema,使用CALL db.schema.visualization() 在这里插入图片描述查看每个类型节点的数量和情况,(和mysql差不多,语法关键词不区分大小写,节点类型等区分)match (p:Poem) return p # 如果要看数量 match (p:Poem) return count(p) 由于没有关系,所以暂时无法进行更多的查询。 参考

Data Migration between MySQL and Neo4j

Database Integration

APOC 库增加了与其他数据库集成的支持,包括关系数据库(通过 JDBC)、MongoDB、Elastic 和 Couchbase。 它还支持从 LDAP 目录导入数据并针对其他 Neo4j 数据库执行查询。

Tutorial: Import Relational Data Into Neo4j

MySQL迁移到Neo4j几种方法及注意事项

github博客:From SQL to Neo4j: Northwind



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3