介绍一种用python将pg数据到mongodb数据的转换方法。转换过程简单,且使用python开发,只需极少的代码量。就可以把数据库的一个模式下的所有表转换到mogodb中的集合中。
二、数据转换所需要的py包Python需要连接pg数据库和mongodb数据库,从pg中读取数据,然后数据写入到mongodb中。Pg的开发包是psycopg,mongodb的开发包是pymongo。安装使用pip就可以了。这里就不做介绍如何使用pip。朋友们可以百度下就行了。本文中所用的pip是pip3,python的版本是3+plus。
三、转换思路转换分为二个阶段:从pg中读取数据,然后连接mogodb数据库,进行数据写入。在Pg中指定一个模式,轮询获取所有的表,然后针对每个表获取其相应的列。将表和列作为mongodb的集合和字段信息,再结合表的每一条记录。构造成mongodb的文档形式,将数据推送到mongodb中。
引入psycopg 和pymongo包,在文件开头导入即可。
import psycopg
import pymongo
Python中连接pg的方法和步骤如下,和一般的连接数据库 *** 作相同,涉及到如下几个对象,connection连接对象,cursor游标,以及结果集等。
Python中的mongodb连接方法如下,连接字符串由monogd服务定义,
mogoclient = pymongo.MongoClient(“mongodb://192.168.56.103:8800/”)。
获取指定的数据库方法如下,括号内为数据库的名称
mogodb = mogoclient[“test”]
再根据数据库对象可以获取集合对象
mycol = mogodb[table]
其中,Mogoclient的类型为pymongo.mongo_client.MongoClient,代表客户端与mogondb的连接;Mogodb的类型为pymongo.database.Database;Mycol的类型为pymongo.collection.Collection,表示一个集合。
2)pg视图遍历一个pg的模式下所有表,以及表对应的列,有很多元数据视图可以用。这里挑选information_schema.tables与information_schema.columns。因为,这两个视图根据给定的数据库名和模式可以直接查出表和列表,中间不需要再借助其它的视图,转换oid之类的元素,相对简单。
查找方式如下,
results=psql_querydbsql(‘select * from :table_schema.:table’)
然后遍历结果集,针对每一条记录,按表名对集合名,列名对字段属性,构造成如下的mongodb文档。
文档1={‘列名1’:字段值1,‘列名2’:字段值2,‘列名3’:字段值3,‘列名4’:字段值4,…}
最后调用
mycol.insert_one(文档1)
也可以同时批量插入多个文档,这可以使用方法mycol.insert_many
在这个步骤中,会遇到类型从pg转换到mongodb失败的情形。如pg中Decimal(‘5’)的这个类型,可以根据表结构的实际类型,采用int(字段值),或float(字段值)进行转换。对于日期类型,如果转换成mongodb时间戳失败,可使用datetime.fromordinal(字段值.toordinal())来进一步转换。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)