Python中如何将Oracle数据库表a的字段及新赋值字段插入到结构不同的表b

在页面上输入订单号查询表 A 的数据,将表 A 中的部分字段值提取到页面上,做修改。其他字段值不变。

把修改之后的值和未做修改的字段,一起插入到新表格 b 中。 表格 A 与 表格 B 的表结构相似但是不完全相同。现在主要问题是:怎么把修改之后的字段和未做修改的字段一起插入到表 B 中呢?(两个表的列数非常多,200 多列)

要求:

1.在页面上修改的数据 只做取值给表 B 使用,不修改表 A。

2.在表 B 中新增修改记录字段(作主键),格式为原订单号+数字。两个表结构见下图,只是截图了一部分以作实例,实际上两个表的列都有几百列。在页面修改的值大概有七八个左右。

image

不知道有没有描述清楚,如果没描述清楚,麻烦答主告知,我再补充、


Python中如何将Oracle数据库表a的字段及新赋值字段插入到结构不同的表b

1 回复

这个问题很常见,处理异构表结构的数据迁移,关键在于字段映射。核心思路是:先查询表a,在Python里处理数据,然后按表b的结构插入。

假设表a有id, name, old_value字段,表b有uid, full_name, new_value, create_time字段,并且new_value需要基于old_value计算。

import cx_Oracle
from datetime import datetime

# 1. 连接数据库
conn_a = cx_Oracle.connect('user/password@host:port/service_name')
conn_b = cx_Oracle.connect('user/password@host:port/service_name')  # 可以是同一个库

try:
    cursor_a = conn_a.cursor()
    cursor_b = conn_b.cursor()
    
    # 2. 查询表a数据
    query_a = "SELECT id, name, old_value FROM table_a"
    cursor_a.execute(query_a)
    rows = cursor_a.fetchall()
    
    # 3. 准备插入表b的SQL
    insert_b = """
    INSERT INTO table_b (uid, full_name, new_value, create_time)
    VALUES (:1, :2, :3, :4)
    """
    
    # 4. 处理每条记录并插入表b
    for row in rows:
        a_id, a_name, a_old_value = row
        
        # 字段映射与转换逻辑
        uid = a_id  # 直接映射
        full_name = f"User_{a_name}"  # 新赋值字段
        new_value = a_old_value * 2  # 基于旧值计算新值
        create_time = datetime.now()  # 新增字段
        
        # 执行插入
        cursor_b.execute(insert_b, (uid, full_name, new_value, create_time))
    
    # 5. 提交事务
    conn_b.commit()
    print("数据插入成功!")

except Exception as e:
    conn_b.rollback()
    print(f"操作失败: {e}")
finally:
    cursor_a.close()
    cursor_b.close()
    conn_a.close()
    conn_b.close()

关键点:

  1. 字段映射:在for循环里明确每个字段的对应关系。
  2. 数据转换:在插入前完成所有计算和格式转换。
  3. 事务管理:确保数据一致性,出错时回滚。

如果数据量大,考虑分批次处理或用executemany。表结构差异越大,这里的转换逻辑会越复杂,但模式不变。

总结:写好映射逻辑,在内存里转换数据再插入。

回到顶部