数据同步大冒险:PostgreSQL到MySQL的奇妙之旅

引言:一场跨数据库的浪漫邂逅 💑

在数据的世界里,不同数据库系统就像是来自不同星球的恋人,它们各自拥有独特的魅力,但偶尔也会渴望一场跨越界限的亲密接触。今天,我们就来见证一场PostgreSQL与MySQL之间的浪漫邂逅——定时获取PostgreSQL中的数据,并将其温柔地同步至MySQL的怀抱中。这不仅是一场技术的挑战,更是一次数据流转的艺术展现!

场景设定:数据的星际旅行 🚀

想象一下,你是一位数据守护者,负责管理着两个星球的数据库:PostgreSQL的“科技星球”和MySQL的“人文星球”。每天,你都需要从“科技星球”收集最新的科研成果(数据),然后运送到“人文星球”上,让那里的居民也能享受到科技进步的果实。

思路分析:星际导航图 🗺️

要完成这场星际旅行,我们需要精心规划航线:

启航准备:确保两艘飞船(数据库连接)都已就绪,且飞船上的储物舱(数据表)结构相似,便于数据转移。
坐标定位:首先,从PostgreSQL中读取最新的数据ID,这是我们的“出发坐标”。然后,在MySQL中查询最新的数据ID,作为我们的“目标坐标”。
航线规划:通过比较两个坐标的差距,我们可以确定哪些数据是新增的,需要被“运送”到MySQL。这就像是在浩瀚的数据海洋中,绘制出一条最优的航线。
数据转移:根据规划好的航线,将选定的数据从PostgreSQL中提取出来,并安全地“降落”在MySQL的相应位置。
实战代码:编写星际导航程序 💻
虽然具体的代码实现需要你们自己来完成(因为你们才是这场冒险的主角!),但我可以给你们一个大致的框架,就像是一个星际导航程序的伪代码:

# 假设这是你的星际导航程序  
  
def connect_to_postgresql():  
    # 连接PostgreSQL数据库,获取连接对象  
    # ...  
    return pg_connection  
  
def connect_to_mysql():  
    # 连接MySQL数据库,获取连接对象  
    # ...  
    return mysql_connection  
  
def fetch_latest_ids(connection, table_name):  
    # 从指定数据库中获取最新数据ID  
    # 使用SQL查询,如 SELECT MAX(id) FROM table_name  
    # ...  
    return latest_id  
  
def sync_data(pg_connection, mysql_connection, source_table, target_table):  
    # 1. 获取两个数据库的最新ID  
    pg_latest_id = fetch_latest_ids(pg_connection, source_table)  
    mysql_latest_id = fetch_latest_ids(mysql_connection, target_table)  
      
    # 2. 确定需要同步的数据范围  
    if pg_latest_id > mysql_latest_id:  
        # 3. 编写SQL查询,选择ID在mysql_latest_id到pg_latest_id之间的数据  
        # 4. 执行查询,获取数据  
        # 5. 编写SQL语句,将获取的数据插入MySQL  
        # ...  
  
# 定时执行数据同步任务  
# 可以使用APScheduler等库来实现定时任务

结尾:星际旅行的意义 🌟
通过这场PostgreSQL到MySQL的数据同步冒险,我们不仅实现了数据的跨库流动,更深刻体会到了数据在不同系统间共享的重要性。正如星际旅行不仅仅是为了探索未知,更是为了促进不同文明之间的交流与融合。希望这次经历能激发你们对数据世界更多奇妙的想象和探索!

实际源码

"""
功能:
监测数据表是否更新
连接postgresql
连接mysql
比较-同步
"""
import sys
import pymysql
import psycopg2
import pandas as pd
import numpy as np

dbname_mysql = 'followup'
table_name_list_mysql = ['s01_issue_table',
                         'np_kickoff','np_rfq',
                         's02_np_kickoff','s02_np_rfq',
                         's06_kick_off_list','s06rfqlist']

dbname_postgresql = 'lcmbigdata'
table_name_list_postgresql = ['s01_issue_table',
                         'np_kickoff','np_rfq',
                         's02_np_kickoff','s02_np_rfq',
                         's06_kick_off_list','s06rfqlist']

col_address_lists = [['create_time', 'update_time'],
                     ['create_time', 'update_time','kickoffdate'],['create_time', 'update_time','evaluation_date'],
                     ['create_time', 'update_time','kickoffdate'],['create_time', 'update_time','evaluation_date'],
                     ['create_time', 'update_time','kickoffdate'],['create_time', 'update_time','evaluation_date']]

modelname_postgresql = 'digitalelf'

# 数据库连接参数
conn_params_mysql = {
   
    "database": dbname_mysql,
    "user": "root",
    "password": "root",
    "host": "localhost",
    "port": 3306  # 端口号应该是整数
}
conn_params_postgresql = {
   
    "database": dbname_postgresql,
    "user": "postgres",  # 数据库用户
    "password": "root",  # 数据库密码
    "host": "localhost",  # 数据库服务器地址
    "port": 6666  # 数据库端口
}

issue_columns = ['id' ,'model_no' ,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值