mongodb資料轉mysql資料庫

2021-08-21 07:29:36 字數 2714 閱讀 7112

from pymongo import mongoclient

import pymysql

class

mongo2mysql

(object):

defenable_mysql

(self, mysql_host, mysql_port, database, username, password, charset):

""" 啟動連線mysql資料庫

:return: conn鏈結物件,mysql_cs游標物件

"""try:

conn = pymysql.connect(

host=mysql_host,

port=mysql_port,

database=database,

user=username,

password=password,

charset=charset,

)mysql_cs = conn.cursor()

return conn, mysql_cs

except exception as e:

print('mysql連線異常')

raise e

defenable_mongo

(self, mongo_host, mongo_port, db_name, collection):

""" 開啟mongo的鏈結

:param db_name: 要鏈結的資料庫名稱,字串

:param collection: 資料庫內集合名稱,字串

:return: coll 集合物件

"""try:

client = mongoclient(host=mongo_host, port=mongo_port) # 只有這裡會報錯

coll = client[db_name][collection] # 獲取資料集合

return coll

except exception as e:

print('mongodb連線異常')

raise e

defdata_from_mongo

(self, item, *args):

""" 從mongodb取出資料

:*args: 需要獲取的字段key,字串

:return: 列表,需要取出的資料,這個列表將作為構造sql語句時的params引數

"""params = list()

for key in args:

return params

defset_sql

(self, tb_name, params: list):

"""構造sql語句,暫時先自行在外設定,後續完善"""

# todo

pass

definsert

(self, mysql_cs, conn, sql, params):

"""執行插入語句"""

try:

mysql_cs.execute(sql, params)

conn.commit()

except exception as e:

conn.rollback()

raise e

if __name__ == '__main__':

# 使用樣例

m2s = mongo2mysql()

# 連線mongodb

coll = m2s.enable_mongo('localhost', 27017, 'baoxian', 'agent')

# 連線mysql,得到游標物件和連線物件

conn, mysql_cs = m2s.enable_mysql('localhost', 3306, 'aixinbaoxian', 'root', 'heyin', 'utf8')

# 從mongodb中查詢出資料的游標物件,可以自定義查詢結果

data_cursor = coll.find({})

# 構造需要從mongodb中得到的欄位名稱列表

args = ['name', 'code', 'position', 'province', 'city', 'info_url', 'code_url', 'phone', 'company', 'crawl_time']

# 遍歷cursor物件獲取每一條記錄

for item in data_cursor:

# 從mongodb中得到每條記錄的真實資料,用來構造sql語句中的values

params = m2s.data_from_mongo(item, *args)

print(params)

# todo sql帶引數的語句,自行指定哪些字段需要被插入資料,預設情況下,mysql欄位名和args相同

sql = 'insert into agent_caiji_axbxw (name,code,position,province,city,info_url,code_url,phone,company,crawl_time) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'

# 執行插入

m2s.insert(mysql_cs, conn, sql, params)

# 關閉連線

mysql_cs.close()

conn.close()

print('資料插入完成')

MYSQL資料庫資料匯入mongoDB

為測試mondodb與mysql資料效能對比,需要先將存在mysql中的資料匯入到mongodb中。基本流程是 1.先將mysql資料匯入到文字中 2.利用mongodb的資料匯入工具將資料匯入到mongodb中 具體操作如下 1.進入mysql資料資料庫,這裡的資料庫名稱是robinhood af...

轉MongoDB 使用Skip和limit分頁

關於mongodb 資料分頁和排序 limit,skip使用者的一些基礎語句,介紹mongodb 資料分頁和排序例項方法。使用skip和limit可以如下做資料分頁 code page1 db.things.find limit 20 page2 db.things.find skip 20 lim...

轉MongoDB 使用Skip和limit分頁

關於mongodb 資料分頁和排序 limit,skip使用者的一些基礎語句,介紹mongodb 資料分頁和排序例項方法。使用skip和limit可以如下做資料分頁 code page1 db.things.find limit 20 page2 db.things.find skip 20 lim...