«

Python3数据抽取同步demo

发布于 阅读:71 教程


import pymysql
import datetime
import ulid
# 连接源数据库
source_conn = pymysql.connect(
    host='192.168.1.51',
    user=数据库用户名,
    password='数据库密码',
    db='源数据库'
)
# 连接目标数据库
target_conn = pymysql.connect(
    host='192.168.1.51',
    user=数据库用户名,
    password='数据库密码',
    db='目标数据库'
)
# 获取源数据库游标
source_cursor = source_conn.cursor()
# 获取目标数据库游标
target_cursor = target_conn.cursor()
# 初始化已更新和已插入的行数
updated_rows = 0
inserted_rows = 0
# 执行查询
source_cursor.execute("SELECT * FROM emlog_user")

# 遍历查询结果,并将数据插入或更新到目标数据库
for row in source_cursor:
    # 检查目标数据库中是否已经存在相同的数据
    check_query = "SELECT * FROM user WHERE username = %s"
    target_cursor.execute(check_query, (row[1]))
    # 如果目标数据库中存在相同的数据,则比较数据是否有变化
    if target_cursor.rowcount > 0:
        target_row = target_cursor.fetchone()
        # 如果数据有变化,则更新目标数据
        if row[3] != target_row[3]:
            update_query = "UPDATE user SET uid = %s,nickname = %s,password = %s,update_time = %s WHERE username = %s"
            target_cursor.execute(update_query, (row[0],row[3], row[2], datetime.datetime.now(), row[1]))
            updated_rows += 1
    # 如果目标数据库中不存在相同的数据,则插入新数据
    else:
        insert_query = "INSERT INTO user (uid, username, password, nickname,update_time, uuid) VALUES (%s, %s, %s, %s, %s, %s)"
        target_cursor.execute(insert_query, (row[0], row[1], row[2], row[3],datetime.datetime.now(),ulid.new()))
        inserted_rows += 1
# 提交目标数据库事务
target_conn.commit()
# 打印已更新和已插入的行数
print(f"已更新数据: {updated_rows} 条")
print(f"已写入数据: {inserted_rows} 条")
# 关闭游标和数据库连接
source_cursor.close()
source_conn.close()
target_cursor.close()
target_conn.close()

MySQL Python