Python中如何将Oracle数据库表a的字段及新赋值字段插入到结构不同的表b
在页面上输入订单号查询表 A 的数据,将表 A 中的部分字段值提取到页面上,做修改。其他字段值不变。
把修改之后的值和未做修改的字段,一起插入到新表格 b 中。 表格 A 与 表格 B 的表结构相似但是不完全相同。现在主要问题是:怎么把修改之后的字段和未做修改的字段一起插入到表 B 中呢?(两个表的列数非常多,200 多列)
要求:
1.在页面上修改的数据 只做取值给表 B 使用,不修改表 A。
2.在表 B 中新增修改记录字段(作主键),格式为原订单号+数字。两个表结构见下图,只是截图了一部分以作实例,实际上两个表的列都有几百列。在页面修改的值大概有七八个左右。

不知道有没有描述清楚,如果没描述清楚,麻烦答主告知,我再补充、
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()
关键点:
- 字段映射:在
for循环里明确每个字段的对应关系。 - 数据转换:在插入前完成所有计算和格式转换。
- 事务管理:确保数据一致性,出错时回滚。
如果数据量大,考虑分批次处理或用executemany。表结构差异越大,这里的转换逻辑会越复杂,但模式不变。
总结:写好映射逻辑,在内存里转换数据再插入。

