首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python脚本比较MongoDB和MySQL之间的数据

使用python脚本比较MongoDB和MySQL之间的数据
EN

Stack Overflow用户
提问于 2021-01-09 17:39:25
回答 1查看 374关注 0票数 0

我正在开发一个Django应用程序,它同时使用MySQL和MongoDB来存储数据。我需要做的是比较存储在MongoDB集合中的数据和存储在MySQL表中的数据。

例如,我的MySQL数据库包含“关系”表,该表是使用以下方法创建的:

代码语言:javascript
复制
CREATE TABLE relations (service_id int, beneficiary_id int, PRIMARY KEY (service_id, beneficiary_id));

我的MongoDB包含一个名为" relation“的集合,它将存储与MySQL中的关系表相同的数据。以下是收藏“关系”的一份文件:

代码语言:javascript
复制
{'_id': 0, 'service_id': 1, 'beneficiary_id': 32}

我尝试创建一个python脚本来比较MySQL中的关系表和Mongo中的关系集合之间的数据。该脚本的工作方式如下:

代码语言:javascript
复制
mysql_relations = Relations.objects.values('beneficiary_id', 'service_id')
mongo_relations_not_in_mysql = relations_mongodb.find({'$nor':list(mysql_relations)})

mongo_relations = relations_mongodb.find({}, {'_id': 0, 'beneficiary_id':1, 'service_id': 1})
filter_list = Q()
for mongo_relation in mongo_relations:
    filter_list &= Q(mongo_relation)
mysql_relations_not_in_mongo = Relations.objects.exclude(filter_list)

但是,这段代码要花费很长时间。我认为主要的问题是因为主键由2列组成,这需要使用Q()和‘nor’。

你有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-11 19:48:59

为了防止有人感兴趣,我使用了以下解决方案来优化数据比较。

(这个想法是创建一个临时的MySQL表来存储mongo的数据,然后在MySQL表之间进行比较)。守则如下:

  1. 从MongoDB那里得到关系

mongo_relations = relations_mongodb.find({},{'_id':0,'service_id':1,‘受益人_id’:1})

  1. 创建临时MySQL表来存储MongoDB的关系

游标= connection.cursor() cursor.execute(“创建临时表temp_relations (service_id int,beneficiary_id int,索引id\_related (service\_idbeneficiary\_id) )”)

  1. 插入MongoDB的关系,而不是刚才创建的临时表

cursor.executemany(‘插入到temp_relations (service_id,beneficiary_id)值(%(service_id)s,%(Beneficiary_id)s ',list(mongo_relations) )

  1. 得到MySQL中不存在的MongoDB关系

cursor.execute (“选择service_id,从temp_relations中选择beneficiary_id,其中(service_id,beneficiary_id)不是IN”(“从关系中选择service_id,beneficiary_id )”) mongo_relations_not_in_mysql =

  1. 获取MongoDB中不存在的MySQL关系

cursor.execute (“SELECT id,service_id,beneficiary_id,date FROM relations (service_id,beneficiary_id) not IN”);mysql_relations_not_in_mongo = cursor.fetchall() cursor.close() #关闭与MySQL的连接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65645675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档