最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)Mysql全量數(shù)據(jù)同步的腳本分享

 更新時(shí)間:2023年06月19日 16:43:29   作者:一夜奈何梁山  
這篇文章主要為大家詳細(xì)介紹了基于Python如何實(shí)現(xiàn)Mysql全量數(shù)據(jù)同步的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

一: 需求

線上數(shù)據(jù)全量同步到測試環(huán)境。

二:腳本

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import datetime
import pymysql
import os

CUR_PATH = os.path.dirname(os.path.abspath(__file__))

# 需要同步的表
table_names = ['table_name_1', 'table_name_2']

source_db_config = {
    'db_host': 'XXXXX',
    'db_user': 'XXXX',
    'db_pwd': 'XXXX',
    'db': 'XCXXXCX',
    'db_port': 3306,
}

out_db_config = {
    'db_host': 'XXXX',
    'db_user': 'XXXX',
    'db_pwd': 'XXXX',
    'db': 'XXXXX',
    'db_port': 3306,
}


def get_datas(table_name):
    """源數(shù)據(jù)庫,獲取全量數(shù)據(jù)"""
    db = pymysql.connect(source_db_config['db_host'], source_db_config['db_user'], source_db_config['db_pwd'],
                         source_db_config['db'], source_db_config['dp_port'], charset='utf8')
    cursor = db.cursor(pymysql.cursors.DictCursor)
    readsql = '''select * from {}'''.format(table_name)
    cursor.execute(readsql)
    results = cursor.fetchall()
    for data in results:
        yield data
    cursor.close()
    db.close()


def format_data(data):
    """數(shù)據(jù)格式化"""
    for k, v in data.items():
        if type(v) == datetime.datetime:
            data[k] = "'{}'".format(v.strftime('%Y-%m-%d %H:%M:%S'))
        elif type(v) == type(v) == datetime.date:
            data[k] = "'{}'".format(v.strftime('%Y-%m-%d'))
        elif type(v) == unicode:
            data[k] = "'{}'".format(v.encode('utf-8'))
    return data


def out_put_data(table_name):
    write = pymysql.connect(out_db_config['db_host'], out_db_config['db_user'], out_db_config['db_pwd'],
                            out_db_config['db'], out_db_config['dp_port'], charset='utf8')
    for data in get_datas(table_name):
        write_cursor = write.cursor()
        data = format_data(data)
        sql = ','.join(['{}=%s'.format(item) for item in data.keys()])
        temp = sql % (tuple(data.values()))

        write_sql = '''insert  into  %s set %s on  duplicate key update %s''' % (table_name, temp, temp)
        try:
            write_cursor.execute(write_sql)
            write.commit()
        except Exception as e:
            print("insert error, err_msg is {}".format(e))
            write.rollback()
        finally:
            write_cursor.close()
    write.close()


if __name__ == "__main__":
    start_time = time.time()
    for table_name in table_names:
        out_put_data(table_name=table_name)
    end_time = time.time()
    cost_time = end_time - start_time
    print("cost_time is {}".format(cost_time))

到此這篇關(guān)于Python實(shí)現(xiàn)Mysql全量數(shù)據(jù)同步的腳本分享的文章就介紹到這了,更多相關(guān)Python Mysql數(shù)據(jù)同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

大庆市| 富阳市| 习水县| 宜城市| 额敏县| 舒城县| 开封市| 荆门市| 高安市| 衡南县| 巧家县| 安西县| 罗城| 辉南县| 江都市| 姜堰市| 花莲市| 伊金霍洛旗| 合作市| 津南区| 阿图什市| 西丰县| 龙游县| 中宁县| 肃南| 个旧市| 青州市| 鄂托克旗| 于都县| 侯马市| 塘沽区| 重庆市| 武隆县| 崇仁县| 锦屏县| 新丰县| 洪泽县| 绿春县| 抚松县| 醴陵市| 沁水县|